#include#include #include #include #include #include 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++) P4924 [1007]魔法少女小Scarlet (C++)](http://www.mshxw.com/aiimages/31/738517.png)
