十字链表模拟
#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(" "); } } return 0; }