#include<iostream>
#include<cstdio>
#include <iomanip>
#include<cmath>
#include<string>
#include<algorithm>
using namespace std;
int A[1000][1000] = {0};//用来存放生成的矩阵
int temp[1000][1000] = { 0 };//临时数组
struct rule {
int x;
int y;
int r;
int z;
};
int main()
{
int n, m;//矩阵维度,条件个数
cin >> n >> m;
rule a[1000];//条件的结构体
for (int i = 1; i <= m; i++)
{
cin >> a[i].x >> a[i].y >> a[i].r >> a[i].z;
}
int k = 1;
for (int j = 1; j <= n; j++)//矩阵初始化
{
for (int i = 1; i <= n; i++)
{
A[j][i] = k;
k++;
}
}
for (int b = 1; b <= m; b++)
{
if (a[b].z == 0)//顺时针
{//难想的点就是旋转矩阵,其实是有规律的,观察旋转前后的图像寻找规律
for (int i = a[b].x - a[b].r; i <= a[b].x + a[b].r; i++)
{
for (int j = a[b].y - a[b].r; j <= a[b].y + a[b].r; j++)
{
temp[i][j] = A[i][j];//放入到临时数组中
}
}
int x2 = a[b].x - a[b].r; int y2 = a[b].y + a[b].r;
for (int x1 = a[b].x - a[b].r; x1 <= a[b].x + a[b].r; x1++)
{
for (int y1 = a[b].y - a[b].r; y1 <= a[b].y + a[b].r; y1++)
{
A[x2][y2] = temp[x1][y1];
x2++;
}
y2--;
x2= a[b].x - a[b].r;
}
}
else
{
for (int i1 = a[b].x - a[b].r; i1 <= a[b].x + a[b].r; i1++)
{
for (int j1 = a[b].y - a[b].r; j1 <= a[b].y + a[b].r; j1++)
{
temp[i1][j1] = A[i1][j1];//放入到临时数组中
}
}
int x3 = a[b].x - a[b].r; int y3 = a[b].y - a[b].r;
for (int y1 = a[b].y + a[b].r; y1 >= a[b].y - a[b].r; y1--)
{
for (int x1 = a[b].x - a[b].r; x1 <= a[b].x + a[b].r; x1++)
{
A[x3][y3] = temp[x1][y1];
y3++;
}
x3++;
y3 = a[b].y - a[b].r;
}
}
}
for (int p = 1; p <= n; p++)//矩阵初始化
{
for (int q = 1; q <= n; q++)
{
cout << A[p][q]<<" ";
}
cout << endl;
}
return 0;
}
P4924 [1007]魔法少女小Scarlet (C++)
最新推荐文章于 2023-01-13 00:01:41 发布