矩阵旋转

原创 2013年12月03日 21:29:07

矩阵旋转

Time Limit : 3000/1000ms (Java/Other)   Memory Limit : 65535/32768K (Java/Other)
Total Submission(s) : 30   Accepted Submission(s) : 10

Font: Times New Roman | Verdana | Georgia

Font Size:  

Problem Description

给你各一个n*n的矩阵,你的任务是将它顺时针旋转角度d。

Input

输入的第一个数为T,表示接下来有T组数据。
每组数据的格式如下:
  第一行为两个整数n,d。1<=n<=100,d是90的倍数。
  接下来有n行。每行n个整数,每个数之间由一个空格隔开,表示这个矩阵的元素。

Output

输出旋转后的矩阵,每个矩阵后面空一行,注意行末不要输出多余的空格。

Sample Input

2
3 90
1 2 3
4 5 6
7 8 9
4 270
1 2 3 4
5 6 7 8
9 10 11 12
13 14 15 16

Sample Output

7 4 1
8 5 2
9 6 3

4 8 12 16
3 7 11 15
2 6 10 14
1 5 9 13

Author

#include <iostream>
#include <string.h>
#include <stdio.h>
using namespace std;
int a[105][105],b[105][105];
int main ()
{
    int t,n,d;
    scanf("%d",&t);
    while(t--)
    {
        scanf("%d%d",&n,&d);
        memset(a,0,sizeof(a));
        memset(b,0,sizeof(b));
        for(int i=1; i<=n; i++)
            for(int j=1; j<=n; j++)
                scanf("%d",&a[i][j]);
                d%=360;//输入的可能是360的倍数 很多倍
        if(d==0||d==360)
        {
            for(int i=1; i<=n; i++)
            {
                for(int j=1; j<=n; j++)
                {
                    if(j==n)
                        printf("%d",a[i][j]);
                    else
                        printf("%d ",a[i][j]);
                }
                printf("\n");
            }
            printf("\n");
        }
        else if(d==90)
        {
            for(int i=1; i<=n; i++)
                for(int j=1; j<=n; j++)
                    b[j][n-i+1]=a[i][j];
            for(int i=1; i<=n; i++)
            {
                for(int j=1; j<=n; j++)
                {
                    if(j==n)
                        printf("%d",b[i][j]);
                    else
                        printf("%d ",b[i][j]);
                }
                printf("\n");
            }
            printf("\n");
        }
        else if(d==180)
        {
            for(int i=1; i<=n; i++)
                for(int j=1; j<=n; j++)
                    b[n-i+1][n-j+1]=a[i][j];
            for(int i=1; i<=n; i++)
            {
                for(int j=1; j<=n; j++)
                {
                    if(j==n)
                        printf("%d",b[i][j]);
                    else
                        printf("%d ",b[i][j]);
                }
                printf("\n");
            }
            printf("\n");
        }
        else
        {
            for(int i=1; i<=n; i++)
                for(int j=1; j<=n; j++)
                    b[n-j+1][i]=a[i][j];
            for(int i=1; i<=n; i++)
            {
                for(int j=1; j<=n; j++)
                {
                    if(j==n)
                        printf("%d",b[i][j]);
                    else
                        printf("%d ",b[i][j]);
                }
                printf("\n");
            }
            printf("\n");
        }
    }
    return 0;
}

矩阵旋转的算法

对于 n*n矩阵旋转,取矩阵元素时从下标0开始,则(x,y)旋转后的位置为(y,n-1-x),在不考虑空间的情况下,可以遍历矩阵,根据旋转关系将元素填入新矩阵对应位置即可 伪代码为 for i = 0...
  • wuli2496
  • wuli2496
  • 2015年07月18日 11:52
  • 1067

[LeetCode] Spiral Matrix 旋转打印矩阵

Given a matrix of m x n elements (m rows, n columns), return all elements of the matrix in spiral or...
  • jiyanfeng1
  • jiyanfeng1
  • 2014年12月10日 07:45
  • 835

北大OJ百练——4075:矩阵旋转(C语言)

给定一个n*n的矩阵,求出该矩阵顺时针旋转90度后的矩阵。
  • u013761665
  • u013761665
  • 2014年04月18日 14:22
  • 2171

python 实现 矩阵逆时针旋转

先写个标题,晚上再贴代码与总结
  • hesiyuan4
  • hesiyuan4
  • 2013年10月22日 10:19
  • 3763

矩阵旋转(图像旋转)

CareerCup上的一道题,比较有技巧性,旋转矩阵(图像)。
  • KangRoger
  • KangRoger
  • 2014年08月06日 16:08
  • 3321

矩阵旋转

/* 题目要求:输入一个n*n字符矩阵,把它左转90度后输出 样例输入: 3 abcdefghi 样例输出: a b c d e f g h i c f i b e h a d g */ ...
  • wang_cheng_hei
  • wang_cheng_hei
  • 2013年10月31日 20:28
  • 514

M*N矩阵旋转

一:顺时针旋转九十度 举例:4*3矩阵A1,旋转90度,变成3×4矩阵A2。                                                        ...
  • qq_26891045
  • qq_26891045
  • 2016年04月21日 22:01
  • 1411

经典算法面试题目-矩阵旋转90度(1.6)

题目 Given an image represented by an NxN matrix, where each pixel in the image is 4 bytes, write a m...
  • qq_26525215
  • qq_26525215
  • 2016年07月31日 05:07
  • 13314

面试:数组:旋转矩阵

题目给第一个m*n的矩阵,按螺旋顺序返回所有元素算法越界的判断方法import java.util.*;public class Solution{ public ArrayList spi...
  • mijian1207mijian
  • mijian1207mijian
  • 2016年05月20日 16:36
  • 340

方形矩阵顺时针旋转90度 Rotate Image

题目源自于Leetcode。原地变形题。 题目:You are given an n x n 2D matrix representing an image.Rotate the image by ...
  • luckyjoy521
  • luckyjoy521
  • 2013年11月26日 13:29
  • 1764
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:矩阵旋转
举报原因:
原因补充:

(最多只允许输入30个字)