fork(1) download
  1. #include <iostream>
  2.  
  3. double determinant(const double (&M)[2][2]){
  4. return M[0][0] * M[1][1] - M[0][1] * M[1][0];
  5. }
  6.  
  7. template <std::size_t N>
  8. double determinant(const double (&M)[N][N]){
  9. double det=0.0;
  10.  
  11. double Mminor[N - 1][N - 1];
  12. double sign = 1.0;
  13. for (int i = 0; i < N; i++) {
  14. //get the minor matrix
  15. for (int a = 1; a < N; a++) {
  16. int m=0;
  17. for (int b = 0; b < N; b++) {
  18. if (b != i) {
  19. Mminor[a - 1][m] = M[a][b];
  20. m++;
  21. }
  22. }
  23. }
  24. //add top row element times determinant of its minor
  25. det += sign * M[0][i] * determinant(Mminor);
  26. //swap the sign
  27. sign *= -1.0;
  28. }
  29. return det;
  30. }
  31.  
  32. int main(){
  33. const double myMatrix[3][3] = {{1,2,3}, {4,5,6}, {3,6,1}};
  34. double okay = determinant(myMatrix);
  35. std::cout << "determinant = " << okay << std::endl;
  36. }
Success #stdin #stdout 0s 4392KB
stdin
Standard input is empty
stdout
determinant = 24