📄 matrixcalculation.c
字号:
#define N 3
void initial(int a[N][N])
{
int i,j;
for(i=0;i<N;i++)
for(j=0;j<N;j++)
a[i][j]=N*i+j+1;
}
void init(int arr[])
{ /* to initiate the array*/
int i;
for(i=0;i<N-1;i++)
arr[i]=i;
}
void sort(int arr[],int start)
{ /*to resort the array from the position 'start' to end*/
int i,j;
for(i=start;i<N-1;i++)
for(j=start;j<N-2;j++)
if(arr[j]>arr[j+1])
{
int t=arr[j];
arr[j]=arr[j+1];
arr[j+1]=t;
}
}
int next(int arr[])
{ /* to produce the next arrangemeng*/
int i,j;
int temp;
for(i=N-3;i>=0;i--)
if(arr[i]<arr[i+1])
break;
for(j=N-2;j>i;j--)
if(arr[j]>arr[i])
break;
if(i<0||j<0)
return;
temp=arr[i];
arr[i]=arr[j];
arr[j]=temp;
sort(arr,i+1);
}
long jiecheng(int n)
{ /* to compute n!=n*(n-1)*(n-2)....*2*1 */
long result=1;
while(n>0)
result*=n--;
return result;
}
int nixu(int a[])
{
int i,j;
int n=0;
for(i=0;i<N-2;i++)
for(j=i+1;j<N-1;j++)
if(a[i]>a[j])
n++;
return n;
}
long hanglie(int b[N-1][N-1])
{
int array[N-1];
int count;
int i,j,k;
long result=0,t=1;
init(array);
k=jiecheng(N-1);
for(count=0;count<k;count++)
{
t=1;
for(i=0;i<N-1;i++)
{
j=array[i];
t=t*b[i][j];
}
if(nixu(array)%2==1)
result+=-t;
else
result+=t;
next(array);
}
return result;
}
void child(int a[N][N],int m,int n,int b[N-1][N-1])
{
int i,j,row,col;
row=0;
for(i=0;i<N;i++)
{
if(i==m)
continue;
col=0;
for(j=0;j<N;j++)
if(j!=n)
b[row][col++]=a[i][j];
row++;
}
}
void bansui(int a[N][N],long c[N][N])
{
int b[N-1][N-1];
int i,j;
for(i=0;i<N;i++)
for(j=0;j<N;j++)
{
child(a,i,j,b);
if((i+j)%2==1)
c[i][j]=-hanglie(b);
else
c[i][j]=hanglie(b);
}
}
void main()
{
int a[N][N];
long c[N][N];
int i,j,m,n;
clrscr();
initial(a);
for(i=0;i<N;i++)
{
for(j=0;j<N;j++)
printf("%4d",a[i][j]);
printf("\n\n");
}
bansui(a,c);
printf("\nYuZiShi is:\n");
for(i=0;i<N;i++)
{
for(j=0;j<N;j++)
printf("%12ld",c[i][j]);
printf("\n\n\n");
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -