(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

 

*/

 

你可能感兴趣的:(ACM)