Este codigo es lo mas simple posible para realizar el calculo del determinante de una matriz que se me ha ocurrido (62 lineas), evidentemente se puede optimizar para reducir la complejidad del algoritmo pero eso va a gusto de cada uno, yo solo comparto el codigo para aquellos que les interese.
Nota: El algoritmo calcula el determinante de una matriz de orden "N" mediante adjuntos, empieza desde la primera columna y va reduciendo hasta llegar a la ultima mediante recursividad, tan simple como eso.
Código
#include <stdio.h> #define N 100 int sgn (int x) { if (x%2==0) return(1); return(-1); } int read_dim (int *dim) { int nl; char aux; if (nl!=1) { while (aux!='\n') } if ( (*dim>=100) || (*dim<=0) ) return(0); return(1); } void read_matrix (int matrix[N][N], int dim) { int i, j; for (i=1; i<=dim; i++) { for (j=0; j<dim; j++) } } void matrix_adj (int matrix[N][N], int matrix_aux[N][N], int dim, int m, int n) { int i, j, p, q; for (j=0, q=0; j<dim; j++) if (j!=n) { for (i=0, p=0; i<dim; i++) if (i!=m) { matrix_aux[p][q]=matrix[i][j]; p++; } q++; } } int det_matrix_N (int matrix[N][N], int dim) { int i, j, dim_aux, det; for (i=0, j=0, det=0, dim_aux=dim; i<dim; i++) det+=sgn(i+j)*matrix[i][j]*det_matrix_adj(matrix,dim_aux,i,j); return(det); } int det_matrix_adj (int matrix[N][N], int dim, int m, int n) { int matrix_aux[N][N]; if (dim==1) return(1); matrix_adj(matrix,matrix_aux,dim,m,n); return det_matrix_N(matrix_aux,dim-1); } main() { int dim, matrix[N][N]; while (!read_dim(&dim)) read_matrix(matrix,dim); }