(2015年郑州轻工业学院ACM校赛题)I 旋转图像
矩阵旋转,写一个转 90° 的函数就行了, 注意每次要将 长和宽的值进行交换就行了。
#include<stdio.h> #include<iostream> #include<stack> #include<queue> #include<math.h> #include<stdlib.h> #include<cstring> #include<algorithm> using namespace std; #define Max(a,b) (a>b?a:b) #define Min(a,b) (a<b?a:b) #define INF 0xfffffff #define maxn 110 char maps[maxn][maxn]; void FanZhuan(int n,int m) { int i, j; char mat[maxn][maxn] = {0}; for(i=0; i<n; i++) strcpy(mat[i], maps[i]); memset(maps, 0, sizeof(maps)); for(i=0; i<n; i++) { for(j=0; j<m; j++) { maps[j][n-1-i] = mat[i][j]; } } } int main() { int T, m, n, i, j, k, t; cin >> T; while(T--) { cin >> n >> m; for(i=0; i<n; i++) cin >> maps[i]; cin >> k; int a = k%180; int b = k%360; if(b == 90) FanZhuan(n,m); if(b == 180) FanZhuan(n,m),FanZhuan(m,n); if(b == 270) { FanZhuan(n,m); FanZhuan(m,n); FanZhuan(n,m); } if(a == 90) t = m, m = n, n = t; for(i=0; i<n; i++) { puts(maps[i]); } } return 0; } /* 10 3 4 0001 0011 0111 90 */