zoukankan      html  css  js  c++  java
  • 将正方形矩阵顺时针转动90°

    给定一个 N×N 的矩阵 matrix,把这个矩阵调整成顺时针转动 90°后的形式。例如:

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13     14     15     16

    顺时针转动 90°后为:

     

    13

     

    9

     

    5

     

    1

    14

    10

    6

    2

    15

    11

    7

    3

    16

    12

    8

    4

    这里仍使用分圈处理的方式,在矩阵中用左上角的坐标(tR,tC)和右下角的坐标(dR,dC) 就可以表示一个子矩阵。比如,题目中的矩阵,当(tR,tC)=(0,0)、(dR,dC)=(3,3)时,表示的子矩阵就是整个矩阵,那么这个子矩阵最外层的部分如下。

    1

    2

    3

    4

    5

     

     

    8

    9

     

     

    12

    13

    14

    15

    16

    在这个外圈中,1,4,16,13 为一组,然后让 1 占据 4 的位置,4 占据 16 的位置,16 占据 13 的位置,13 占据 1 的位置,一组就调整完了。然后 2,8,15,9 为一组,继续占据调整的过程,最后 3,12,14,5  为一组,继续占据调整的过程。然后(tR,tC)=(0,0)、

    (dR,dC)=(3,3)的子矩阵外层就调整完毕。接下来令 tR 和 tC 加 1,即(tR,tC)=(1,1),令 dR 和

    dC 减 1,即(dR,dC)=(2,2),此时表示的子矩阵如下。

    6

    7

    10

    11

    这个外层只有一组,就是 6,7,11,10,占据调整之后即可。所以,如果子矩阵的大小是 M×M,一共就有 M-1 组,分别进行占据调整即可。

    #include<iostream>
    using namespace std;
    
    void rotateEdge(int matrix[][4], int tR, int tC, int dR, int dC)
    {
        //总组数
        int times = dC - tC;
        int temp = 0;
        for (int i = 0;i != times;++i)
        {
            temp = matrix[tR][tC + i];
            matrix[tR][tC + i] = matrix[dR - i][tC];
            matrix[dR - i][tC] = matrix[dR][dC - i];
            matrix[dR][dC - i] = matrix[tR + i][dC];
            matrix[tR + i][dC] = temp;
        }
    }
    void rotate(int matrix[][4], int rowCount, int colCount)
    {
        int tR = 0;
        int tC = 0;
        int dR = rowCount - 1;
        int dC = colCount - 1;
    
        while (tR < dR)
            rotateEdge(matrix, tR++, tC++, dR--, dC--);
    }
    
    
    
    int main()
    {
        int matrix[][4] = { 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16 };
        rotate(&matrix[0], 4, 4);
        for each (int  var in matrix)
        {
            cout << var << " ";
        }
        cout << endl;
        system("pause");
    }
  • 相关阅读:
    js 兼容nextSibling
    ie background repeat 出现空白
    自制日历组件
    js cookie操作方法
    html table 上下左右边框
    js window.onload函数
    js 兼容event.target
    ie minheight
    css table 固定宽度
    [翻译]建立你的第一个Visual WebGui应用程序
  • 原文地址:https://www.cnblogs.com/huangzhenxiong/p/7646758.html
Copyright © 2011-2022 走看看