(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
 
*/

 

posted @ 2015-04-21 10:01  向前走丶不回首  阅读(256)  评论(0编辑  收藏  举报