原题链接 来自洛谷https://www.luogu.com.cn/problem/P4924
#include <bits/stdc++.h>
using namespace std;
int num[501][501];
int n, m;
void putout()
{
for (int i = 0; i < n; i++)
{
for (int j = 0; j < n; j++)
printf ("%d ", num[i][j]);
printf ("\n");
}
return ;
}
int main()
{
int i, j, t;
int x, y, r, z;
scanf("%d%d", &n, &m);
for (i = 0; i < n; i++)
for (j = 0; j < n; j++)
num[i][j] = n * i + j+1;
while (m--)
{
//putout();
scanf("%d%d%d%d", &x, &y, &r, &z); x -= 1; y -= 1;
//逆时针 左下 左上 右上
//顺时针 左上 左下 右下
if (z) // 逆时针
{
for (i = 1; i <= r; i++) // 由内至外
{
for (t = 0; t < 2*i; t++)
{
swap(num[x-i][y-i+t], num[x+i-t][y-i]); // 左上
//putout();
}
for (t = 0; t < 2*i; t++)
{
swap(num[x-i][y-i+t], num[x-i+t][y+i]); // 左下
//putout();
}
for (t = 0; t < 2*i; t++)
{
swap(num[x+i][y+i-t], num[x-i+t][y+i]); // 右下
//putout();
}
}
}
else // 顺时针
{
for (i = 1; i <= r; i++)
{
for (t = 0; t < 2*i; t++)
{
swap(num[x-i][y-i+t], num[x-i+t][y+i]); // 左下
//putout();
}
for (t = 0; t < 2*i; t++)
{
swap(num[x-i][y-i+t], num[x+i-t][y-i]); // 左上
//putout();
}
for (t = 0; t < 2*i; t++)
{
swap(num[x+i][y+i-t], num[x+i-t][y-i]); // 右上
//putout();
}
}
}
}
putout();
return 0;
}/*
122
1 3
443
顺时针
411
4 2
332
逆时针
122
1 3
443
*/