Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <vector>
- #include <cmath>
- std::vector<std::vector<double>> compute_minor(std::vector<std::vector<double>> matrix, int skip_i, int skip_j) {
- std::vector<std::vector<double>> v_minor(matrix.size() - 1, std::vector<double>(matrix.size() - 1, 0));
- for(int i = 0, mi = 0; i < matrix.size(); i++) {
- if(i == skip_i) continue;
- for(int j = 0, mj = 0; j < matrix.size(); j++) {
- if(j == skip_j) continue;
- v_minor.at(mi).at(mj++) = matrix.at(i).at(j);
- }
- mi++;
- }
- return v_minor;
- }
- double det(std::vector<std::vector<double>> matrix) {
- if(matrix.size() == 1) {
- return matrix.at(0).at(0);
- }
- int determinant = 0;
- for(int j = 0; j < matrix.size(); j++) {
- int sign = j & 1 ? -1 : 1;
- determinant += sign * matrix.at(0).at(j) * det(compute_minor(matrix, 0, j));
- }
- return determinant;
- }
- int main () {
- std::vector<std::vector<double>> matrix = { { 1, 2, 1, 1}, { 1, 22, 2, 3 }, { 5, 5, 3, 3 }, { 2, 8, 1, 1 } };
- double d = det(matrix);
- std::cout << "Det: " << d << std::endl;
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement