顺时针旋转行翻转加转置,逆时针旋转列翻转加转置。
旋转矩阵
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; }