计蒜客-幻方矩阵

计蒜客-幻方矩阵

计蒜客-幻方矩阵

输入样例

2 2
1 2
3 4
2
0 1 2
1 1 2

输出样例

4 3
2 1
#include<bits/stdc++.h>
using namespace std;

int hang[100005];//记录初始行交换后的新行
int lie[100005];//记录初始列对应的新列
int a[100005];
int hd[100005];//记录当前下标行对应的初始行
int ld[100005];//记录当前下标列对应的初始列
int main(){
	int n,m;
	cin>>n>>m;

	for(int i=1;i<=n;i++){
		for(int j=1;j<=m;j++){
			cin>>a[m*(i-1)+j];
		}
	}
    for(int i=1;i<=n;i++){
    	hang[i]=i;
    	hd[i]=i;
    
	}
	for(int i=1;i<=m;i++){
    	lie[i]=i;
    	ld[i]=i;
	}
	int k;
	cin>>k;
	while(k--){
		int f,x,y;
		cin>>f>>x>>y;
		if(f==0){
			swap(hang[hd[x]],hang[hd[y]]);
			swap(hd[x],hd[y]);
		}
		else {
		
			swap(lie[ld[x]],lie[ld[y]]);	
			swap(ld[x],ld[y]);
		}	
	}
	int d[100005];
			for(int i=1;i<=n;i++){
				for(int j=1;j<=m;j++){
					d[m*(hang[i]-1)+lie[j]]=a[m*(i-1)+j];
				}

			}
			for(int i=1;i<=n;i++){
				for(int j=1;j<=m;j++){
					cout<<d[m*(i-1)+j];
					if(j<m) cout<<" ";
				}
				cout<<endl;
			}
}