更好的交换

拿到题目还是先想着用暴力,但是结果超时了,所以不得不优化代码,显然交换一整行,列,比一个一个交换效率要高很多,并且注意到行交换和列交换是独立的,互不影响,所以可以建立行列的索引列表,过程中只交换索引,最后用索引来输出
`#include<stdio.h>

include<stdlib.h>

include<string.h>

int main(){
int n,m,x,y,a;
scanf("%d %d",&n,&m);
int lst[n][n],row[n],line[n];
for(int i=0;i<n;i++){
row[i]=i;line[i]=i;
for(int j=0;j<n;j++){
scanf("%d",&lst[i][j]);
}
}
for(int j=0;j<m;j++){
scanf("%d %d %d",&a,&x,&y);
int z;
if(a1){
z=row[x-1];
row[x-1]=row[y-1];
row[y-1]=z;
}
else{
z=line[x-1];
line[x-1]=line[y-1];
line[y-1]=z;
}
}
for(int i=0;i<n;i++){
for(int j=0;j<n;j++){
printf("%d",lst[row[i]][line[j]]);
if(j
n-1) printf("\n");
else printf(" ");
}
}
return 0;
}`

学习总结:其实很多编程问题都是数学问题,只要想清楚其中的数学原理,很多题目就可以迎刃而解。

posted @ 2025-01-22 21:13  十柒*  阅读(5)  评论(0编辑  收藏  举报