顺时针旋转行翻转加转置,逆时针旋转列翻转加转置。

旋转矩阵

https://www.nowcoder.com/practice/bd62095a03a545729cdbfc506e0da952

#include <iostream>
#include <vector>
using namespace std;
void inputMatrix(vector<vector<int>> &matrix) {
    for (int i = 0; i < matrix.size(); i++) {
        for (int j = 0; j < matrix[0].size(); j++) {
            cin >> matrix[i][j];
        }
    }
}
void rotate(vector<vector<int>> &matrix) {
    for (int i = 0; i < matrix.size() / 2; i++) {
        for (int j = 0; j < matrix[0].size(); j++) {
            swap(matrix[i][j], matrix[matrix.size() - i - 1][j]);
        }
    }
    for (int i = 0; i < matrix.size(); i++) {
        for (int j = 0; j < i; j++) {
            swap(matrix[i][j], matrix[j][i]);
        }
    }
}
bool isSameMatrix(vector<vector<int>> &matrix1, vector<vector<int>> &matrix2) {
    for (int i = 0; i < matrix1.size(); i++) {
        for (int j = 0; j < matrix1[0].size(); j++) {
            if (matrix1[i][j] != matrix2[i][j]) return false;
        }
    }
    return true;
}
int main() {
    int n;
    cin >> n;
    vector<vector<int>> matrix1(n, vector<int>(n));
    vector<vector<int>> matrix2(n, vector<int>(n));
    inputMatrix(matrix1), inputMatrix(matrix2);
    for (int i = 0; i <= 3; i++) {
        if (isSameMatrix(matrix1, matrix2)) {
            cout << i * 90 << endl;
            return 0;
        }
        rotate(matrix1);
    }
    cout << -1 << endl;
    return 0;
}

全部评论

相关推荐

1 收藏 评论
分享
牛客网
牛客企业服务