行列式を求める関数(C++用)
なんとなく貼ってみる。
n×nの行列aの行列式の値|a|を求める。
まぁ実質C言語だけど。forループ用の変数の宣言あたりがC++風。
int determinant(int **a,int n){ if(n==1) return a[0][0]; else if(n==2) return a[0][0]*a[1][1]-a[0][1]*a[1][0]; else{ int **b; int d=0,s=(n+1)%2?-1:1; b=(int **)malloc(sizeof(int *)*(n-1)); for(int i=0;i<n-1;i++) b[i]=(int *)malloc(sizeof(int)*(n-1)); for(int k=0;k<n;k++){ for(int i=0;i<n-1;i++){ for(int j=0;j<n;j++){ if(j!=k){ b[i][j-(j>k)]=a[i][j]; } } } /* printf("%d\n",s*a[n-1][k]); for(int i=0;i<n-1;i++){ for(int j=0;j<n-1;j++) printf("%d ",b[i][j]); puts(""); } puts("");*/ d+=(s*a[n-1][k]*determinant(b,n-1)); s*=-1; } free(b); return d; } }