提交时间:2019-12-14 14:17:25
运行 ID: 3184
#include<stdio.h> #include<stdlib.h> typedef struct DataType { int result; int row,column; }Data; typedef struct ListData { Data data; struct ListData *next; }List; void Diaohuan(int **a,int **b,int n,int i,int j) { int k,l; if(i>j) { k=i; i=j; j=k; } for(k=0;k<i;k++) for(l=0;l<n;l++) b[k][l]=a[k][l]; for(l=0;l<n;l++) b[i][l]=a[j][l]; for(k=i+1;k<j;k++) for(l=0;l<n;l++) b[k][l]=a[k][l]; for(l=0;l<n;l++) b[j][l]=a[i][l]; for(k=j+1;k<n;k++) for(l=0;l<n;l++) b[k][l]=a[k][l]; } int Cal(int **a,int n) { int i,j; int up=0,down=0; for(i=0;i<n-1;i++) for(j=i+1;j<n;j++) up+=a[i][j]; for(i=1;i<n;i++) for(j=0;j<i;j++) down+=a[i][j]; int result=up-down; if(result<0) return -result; return result; } List * CreateList(int result,int i,int j) { List *h=(List*)malloc(sizeof(List)); h->data.result=result; h->data.row=i; h->data.column=j; h->next=NULL; return h; } void Add(List *h,int result,int i,int j) { List *l=(List*)malloc(sizeof(List)); l->data.result=result; l->data.row=i; l->data.column=j; l->next=NULL; List *l1=h; while(l1->next) l1=l1->next; l1->next=l; } Data Find(List *h) { List *p=h; Data d=p->data; while(p->next) { p=p->next; if(p->data.result>d.result) d=p->data; } return d; } void Free(List *h) { List *p=h; while(h->next) { h=h->next; free(p); p=h; } } int main() { int i,j,n; int **a,**b; scanf("%d",&n); a=(int**)malloc(n*sizeof(int*)); b=(int**)malloc(n*sizeof(int*)); for(i=0;i<n;i++) { a[i]=(int*)malloc(n*sizeof(int)); b[i]=(int*)malloc(n*sizeof(int)); } for(i=0;i<n;i++) for(j=0;j<n;j++) scanf("%d",&a[i][j]); List *h=CreateList(Cal(a,n),0,0); for(i=0;i<n;i++) { for(j=0;j<n;j++) { if(i==0&&j==0) continue; Diaohuan(a,b,n,i,j); Add(h,Cal(b,n),i,j); } } Data data=Find(h); printf("\n\n%d\n\n",data.result); Diaohuan(a,b,n,data.row,data.column); printf("提示:\n\n第%d行与第%d行交换。\n\n",data.row+1,data.column+1); for(i=0;i<n-1;i++) { for(j=i+1;j<n;j++) { if(i==0&&j==1) printf("|%d",b[i][j]); else printf("+%d",b[i][j]); } } for(i=1;i<n;i++) for(j=0;j<i;j++) printf("-%d",b[i][j]); printf("|=%d\n\n",data.result); free(a);free(b); Free(h); return 0; }