#include<stdio.h> #include<string.h> int result; int* data; int* used; int* location; void f(int hang,int lie,int** arr){ if(hang>lie){ int tempS=1; for(int i=0;i<=lie;i++) tempS*=data[i]; int reserveCount=0; for(int j=0;j<=lie;j++) for(int k=j+1;k<=lie;k++) if(location[j]>location[k]) reserveCount++; if(reserveCount%2!=0) tempS=-tempS; result+=tempS; return; } for(int ii=0;ii<=lie;ii++){ if(used[ii]==0){ used[ii]=1; location[hang]=ii; data[hang]=arr[hang][ii]; f(hang+1,lie,arr); used[ii]=0; } } } int main(){ int hang; while(true){ result=0; printf("输入行数\n"); scanf("%d",&hang); int** arr=new int*[hang]; int i; for(i=0;i<hang;i++){ arr[i]=new int[hang]; } data=new int[hang]; used=new int[hang]; location=new int[hang]; for(i=0;i<hang;i++) used[i]=0; printf("依次输入各数\n"); for(i=0;i<hang;i++) for(int j=0;j<hang;j++) scanf("%d",&arr[i][j]); f(0,hang-1,arr); printf("\nvalue= %d\n\n",result); delete[]data; delete[]used; delete[]location; for(i=0;i<hang;i++){ delete[]arr[i]; } } } /* 5 1 2 3 4 5 0 2 3 4 5 0 0 3 4 5 0 0 0 4 5 0 0 0 0 5 */
原文:http://blog.csdn.net/qingchunweiliang/article/details/44680399