更好的交换
思路
问题最后希望通过有限的整行整列操作得到一个新的矩阵,而这个新的矩阵也只是数字的顺序不一样。
进行行变换不会影响到每一列有哪些数字,同样进行列变换不会影响行中有哪些数字,只是可能会影响某一行中数字出现的顺序。
既然行变换不会影响到每一列有哪些问题,列变换不会影响到每一行有哪些元素,那么就可以给每一列、每一行编号,一个行编号与一列编号就可以确定唯一的一个数值,则可以用这些编号代表某一行或者某一列。然后只交换这些编号,最终通过这些编号来看需要先输出哪一行哪一列。最终得到目标矩阵
代码
#include<iostream>
using namespace std;
int main(){
int n,m,op,x,y;
cin>>n>>m;
int arr[n][n];
int l[n],c[n];
for(int i=0;i<n;++i){
l[i]=c[i]=i;
for(int j=0;j<n;++j){
cin>>arr[i][j];
}
}
for(int i=0;i<m;++i){
cin>>op>>x>>y;
if(op==0){//交换列
swap(l[x-1],l[y-1]);
}else if(op==1){//交换行
swap(c[x-1],c[y-1]);
}
}
for(int i=0;i<n;++i){
for(int j=0;j<n;++j){
cout<<arr[c[i]][l[j]];
if(j!=n-1) cout<<' ';
}cout<<endl;
}
return 0;
}