#include<bits/stdc++.h>
using namespace std;
int a[505][505],n,m,b[505][505],k=1,c[505][505];
void print(int a[505][505],int n){
for(int i=1;i<=n;i++,printf("\n"))
for(int j=1;j<=n;j++)
printf("%d ",a[i][j]);
}
void shun(int x,int y,int r){
for(int i=x-r,ii=1;i<=x+r;i++,ii++)
for (int j=x-r,jj=1;j<=x+r;j++,jj++)
b[ii][jj] = a[i][j];//首先将要修改的部分赋给b,且b里是以1下标计算的
int n=2*r+1;
for(int i=1;i<=n;i++)
for (int j=1;j<=n;j++)
c[j][n-i+1] = b[i][j];//c成为b的转置
for(int i=x-r,ii=1;i<=x+r;i++,ii++)
for (int j=y-r,jj=1;j<=y+r;j++,jj++)
a[i][j]=c[ii][jj];//把c赋回去
}
void ni(int x,int y,int r){
for(int i=x-r,ii=1;i<=x+r;i++,ii++)
for (int j=x-r,jj=1;j<=x+r;j++,jj++)
b[ii][jj] = a[i][j];
int n=2*r+1;
for(int i=1;i<=n;i++)
for (int j=1;j<=n;j++)
c[n+1-j][i]=b[i][j];
for(int i=x-r,ii=1;i<=x+r;i++,ii++)
for (int j=y-r,jj=1;j<=y+r;j++,jj++)
a[i][j]=c[ii][jj];
}
int main(){
cin>>n>>m;
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++,k++)
a[i][j]=k;
while(m--){
int x,y,r,z;
cin>>x>>y>>r>>z;
if(z==0)
shun(x,y,r);
else
ni(x,y,r);
}
print(a,n);
return 0;
}
请诸位大神们在源代码上修改
回复必关