アルゴリズム(3)マトリクス回転問題


マトリックス反転問題
  • マトリックス回転問題
  • 1. 反時計回りに90度
  • 回転
  • 2. 時計回りに90度
  • 回転
  • 3. 180度回転

  • マトリックスかいてんもんだい
    あるいは画像の回転の問題です.
    1.反時計回りに90度回転
    反時計回りに90度回転すると、左上から右下の対角線に沿って反転し、上下に反転することができます.マトリックス
    1 2 3
    4 5 6
    7 8 9
    

    まず対角線を反転して
    1 4 7 
    2 5 8
    3 6 9
    

    さらに上下に反転して
    3 6 9
    2 5 8
    1 4 7
    

    元のマトリクスが反時計回りに90度回転した結果にぴったりです.
    2.時計回りに90度回転
    時計回りに90度回転すると、右上から左下の対角線に沿って反転し、上下に反転することができます.マトリックス
    1 2 3
    4 5 6
    7 8 9
    

    まず対角線を反転して
    9 6 3
    8 5 2
    7 4 1
    

    さらに上下に反転して
    7 4 1
    8 5 2
    9 6 3
    

    元のマトリクスが時計回りに90度回転した結果にぴったりです.
    48.回転画像実現:
    void rotate(vector<vector<int>>& matrix) {
         
            int n = matrix.size();
            if(n <= 1){
         
                return;
            }
            for(int i = 0; i < n-1; i++){
         
                for(int j = 0; j < n-1-i; j++){
         
                    int t = matrix[i][j];
                    matrix[i][j] = matrix[n-1-j][n-1-i];
                    matrix[n-1-j][n-1-i] = t;
                }
            }
            for(int i = 0; i < n / 2; i++){
         
                for(int j = 0; j < n; j++){
         
                    int t = matrix[i][j];
                    matrix[i][j] = matrix[n-1-i][j];
                    matrix[n-1-i][j] = t;
                }
            }
        }
    

    3.180度回転
    180度回転は1回の上下反転、1回の左右反転で実現され、2回の反転順序は限定されない.マトリックス
    1 2 3
    4 5 6
    7 8 9
    

    まず上下を反転して
    7 8 9
    4 5 6
    1 2 3
    

    さらに左右に反転して
    9 8 7
    6 5 4
    3 2 1
    

    元のマトリクスが180度回転した結果にぴったりです.