题解 | 旋转矩阵

旋转矩阵

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

#include <cmath>
#include <iostream>
#include <vector>
#include "vector"
using namespace std;
void rotate(vector<vector<int>>&matrix){//顺时针旋转矩阵
    int n=matrix.size();
    for(int i=0;i<n/2;i++){//水平翻转
        for(int j=0;j<n;j++){
            swap(matrix[i][j],matrix[n-1-i][j]);
        }
    }
    for(int i=0;i<n;i++){//主对角线翻转
        for(int j=0;j<i;j++){
            swap(matrix[i][j],matrix[j][i]);
        }
    } 
}
bool equal(vector<vector<int>>m1,vector<vector<int>>m2){//判断矩阵是否相等
    int n=m1.size();
    for(int i=0;i<n;i++){
        for(int j=0;j<n;j++){
            if(m1[i][j]!=m2[i][j])
            return false;
        }
    }
    return true;
}
int judge(vector<vector<int>>&m1,vector<vector<int>>&m2){
    if(equal(m1,m2))//如果m1和m2本身就相等,即不用旋转
        return 0;
    for(int i=1;i<=3;i++){
        rotate(m1);//旋转一次
        if(equal(m1,m2)){//如果矩阵相等
            return i*90; //返回旋转次数×90
        }
    }
    return -1;//如果旋转三次都没能相等,说明第二个不是第一个的旋转矩阵
}
int main() {
    int n;
    cin>>n;
    vector<vector<int>>matrix1(n,vector<int>(n,0));
    vector<vector<int>>matrix2(n,vector<int>(n,0));
    for(int i=0;i<n;i++){
        for(int j=0;j<n;j++){
            cin>>matrix1[i][j];
        }
    }
    for(int i=0;i<n;i++){
        for(int j=0;j<n;j++){
            cin>>matrix2[i][j];
        }
    }
    cout<<judge(matrix1, matrix2);
}

全部评论

相关推荐

阿武同学:基本信息保留前面三行,其他的可以全部删掉,邮箱最重要的你没写,主修课程精简到8个以内,实习里面2/3/4都是水内容的,非要写的话建议两到三句话,项目经历排版优化下,自我评价缩到三行
点赞 评论 收藏
分享
10-13 16:58
门头沟学院 Java
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务