数组从上到下行值增大,从左到右列值增大,和坐标系正方向、横纵坐标表示的意义刚好反着。我是按数组行列值来的,感觉没问题。。。
#include<iostream>
using namespace std;
#define N 510
int n, m;//方阵大小 ,施法次数
int a[N][N], b[N][N];//结果数组,暂存数组
int main(){
int x, y ,r, z;
cin>>n>>m;
int cnt=0;
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
a[i][j]= ++cnt;
for(int k=1;k<=m;k++){
cin>>x>>y>>r>>z;
if(z==0){//顺时针
for(int i=x-r; i<=x+r; i++){
for(int j=y-r; j<=y+r; j++){
b[x+j-y][y+x-i] = a[i][j];
}
}
}
else{//逆时针
for(int i=x-r; i<=x+r; i++){
for(int j=y-r; j<=y+r; j++){
b[x-j+y][y-x+i] = a[i][j];
}
}
}
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
a[i][j]=b[i][j];
}
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++)
cout<<a[i][j]<<' ';
cout<<endl;
}
return 0;
}