题目:
分析:很简单,借助额外数组。
或者就地转置:相当于4个进行值交换
代码:
#include<bits/stdc++.h>
using namespace std;
int m,n;
int A[505][505];
int B[505];
int main()
{
cin>>m>>n;
//初始化A
int mm=1;
for(int i=0;i<m;i++)
for(int j=0;j<m;j++) {
A[i][j]=mm;mm++;
}
//模拟:
for(int i=0;i<n;i++)
{
int x1,x2,x3,x4;
cin>>x1>>x2>>x3>>x4;
if(x3==0) continue;
x1--;
x2--;
if(x4==0)//顺时针
for(int r=1;r<=x3;r++)
{
for(int ii=2*r;ii>0;ii--)
{
int c=A[x1-r][x2-r+ii];
A[x1-r][x2-r+ii]=A[x1+r-ii][x2-r]; //上
A[x1+r-ii][x2-r]=A[x1+r][x2+r-ii]; //左
A[x1+r][x2+r-ii]=A[x1-r+ii][x2+r]; //下
A[x1-r+ii][x2+r]=c; //右
}
}
if(x4==1)//逆时针
for(int r=1;r<=x3;r++)
{
for(int ii=2*r;ii>0;ii--)
{
int c=A[x1-r][x2-r+ii];
A[x1-r][x2-r+ii]=A[x1-r+ii][x2+r];
A[x1-r+ii][x2+r]=A[x1+r][x2+r-ii];
A[x1+r][x2+r-ii]=A[x1+r-ii][x2-r];
A[x1+r-ii][x2-r]=c;
}
}
}
for(int i=0;i<m;i++)
{
for(int j=0;j<m;j++)
{
cout<<A[i][j]<<' ';
}
cout<<endl;
}
}