洛谷:P4924 [1007]魔法少女小Scarlet(模拟,普及/提高- ,矩阵旋转)

题目:

分析:很简单,借助额外数组。

或者就地转置:相当于4个进行值交换

洛谷:P4924 [1007]魔法少女小Scarlet(模拟,普及/提高- ,矩阵旋转)_第1张图片
洛谷:P4924 [1007]魔法少女小Scarlet(模拟,普及/提高- ,矩阵旋转)_第2张图片

代码:

#include
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;
 } 
}

你可能感兴趣的:(图)