二维数组(矩阵)之将矩阵旋转90度

将矩阵旋转90度:

题目描述:

例如将一个5*5的矩阵顺时针旋转90度:旋转前

1       2        3         4         5

6       7        8         9        10

11    12      13      14       15

16    17      18      19       20

21    22      23      24       25

选转后:

21     16      11       6        1

22     17      12       7        2

23     18      13       8        3

24     19      14       9        4

25     20      15      10      5

分析:如果N是偶数,则矩阵构成N/2圈;如果N是奇数,则矩阵构成(N-1)/2 圈;

           将矩阵顺时针旋转90度,就是将每圈的元素在4个方位依次轮换位置:

 

交换元素的公式如下:

                              ai,j    ------------->aj,N-i+1

                                             ↑                             ↓

                                             ↑                             ↓

                                     aN-j+1 ---------->aN-i+1,N-j+1

代码如下:

 1 /* */
 2 # include <iostream>
 3 # include <cstdio>
 4 # include <iomanip>
 5 using namespace std;
 6 
 7 int main()
 8 {
 9     int a[20][20], i, j, p=1, t, n;
10     printf("请输入矩阵的阶:\n");
11     scanf("%d", &n);
12     printf("*******旋转前的矩阵*******\n");
13     for( i=1; i<=n; i++ )
14     {
15         for( j=1; j<=n; j++ )
16         {
17             a[i][j] = p++;
18             printf("%4d", a[i][j]);
19         }
20         printf("\n");
21     }
22     printf("*******顺时针旋转后的矩阵*******\n");
23     for( i=1; i<=n/2; i++ )
24     {
25         for( j=i; j<n-i+1; j++ )
26         {
27             t = a[i][j];
28             a[i][j] = a[n-j+1][i];
29             a[n-j+1][i] = a[n-i+1][n-j+1];
30             a[n-i+1][n-j+1] = a[j][n-i+1];
31             a[j][n-i+1] = t;
32         }
33     }
34     for( i=1; i<=n; i++ )
35     {
36         for( j=1; j<=n; j++ )
37         {
38             printf("%4d", a[i][j]);
39         }
40         printf("\n");
41     }
42     return 0;
43 }

 

 

posted @ 2019-04-14 17:21  swsyya  阅读(10664)  评论(2编辑  收藏  举报

回到顶部