十字链表模拟
#include<bits/stdc++.h>
using namespace std; int n,m,q;
struct Node{
int v; int d,r;
}ma[1005*1005];
int C(int x,int y){
return x*(m+1)+y;
} int main(){
while(~scanf("%d %d %d",&n,&m,&q)) {
for(int i = 1; i <= n; ++i)
for(int j = 1; j <= m; ++j) {
scanf("%d",&ma[C(i,j)].v);
}
for(int i = 0; i <= n; ++i)
for(int j = 0; j <= m; ++j) {
ma[C(i,j)].r = C(i,j+1);
ma[C(i,j)].d = C(i+1,j);
}
for(int i = 0; i < q; ++i) {
int a,b,c,d,h,w; scanf("%d %d %d %d %d %d",&a,&b,&c,&d,&h,&w);
int t1 = 0; int t2 = 0;
for(int i = 1; i < a; ++i) t1 = ma[t1].d;
for(int i = 1; i < b; ++i) t1 = ma[t1].r;
for(int i = 1; i < c; ++i) t2 = ma[t2].d;
for(int i = 1; i < d; ++i) t2 = ma[t2].r;
int x1,x2; x1 = t1; x2 = t2;
for(int i = 1; i <= w; ++i) {
x1 = ma[x1].r; x2 = ma[x2].r;
swap(ma[x1].d, ma[x2].d);
}
for(int i = 1; i <= h; ++i) {
x1 = ma[x1].d; x2 = ma[x2].d;
swap(ma[x1].r, ma[x2].r);
} x1 = t1, x2 = t2;
for(int i = 1; i <= h; ++i) {
x1 = ma[x1].d; x2 = ma[x2].d;
swap(ma[x1].r, ma[x2].r);
}
for(int i = 1; i <= w; ++i) {
x1 = ma[x1].r; x2 = ma[x2].r;
swap(ma[x1].d, ma[x2].d);
}
} int tt = 0;
for(int i = 1; i <= n; ++i) {
tt = ma[tt].d;
int t1 = tt;
for(int j = 1; j <= m; ++j) {
t1 = ma[t1].r;
if(j!=1) printf(" ");
printf("%d",ma[t1].v);
} printf("\n");
} }
return 0;
}