Advertisement

旋转矩阵【北京航空航天大学】

阅读量:

题目链接

版本1

自己写的,这里的旋转是指顺时针旋转!

复制代码
    #include<bits/stdc++.h>
    using namespace std;
    int a[10][10],b[10][10];
    int ans[10][10];
    int n;
    bool same(){
    	for(int i=0;i<n;i++){
    		for(int j=0;j<n;j++){
    			if(ans[i][j] != b[i][j]) return false;
    		}
    	}
    	return true;
    }
    int main(){
    	while(cin>>n){
    		for(int i=0;i<n;i++){
    			for(int j=0;j<n;j++){
    				cin>>a[i][j];
    				ans[i][j] = a[i][j];
    			}
    		}
    		for(int i=0;i<n;i++){
    			for(int j=0;j<n;j++){
    				cin>>b[i][j];
    			}
    		} 
    		if(same()){   //0° 判断 
    			cout<<0<<endl;
    			continue;
    		}
    
    		for(int u=0;u<n;u++){   //顺时针90
    			for(int v=0;v<n;v++){
    				ans[u][v] = a[n-1-v][u];
    			}
    		} 
    		if(same()){   //判断 
    			cout<<90<<endl;
    			continue;
    		}
    
    		for(int u=0;u<n;u++){   //顺时针180° 
    			for(int v=0;v<n;v++){
    				ans[u][v] = a[n-1-u][n-1-v];
    			}
    		} 
    		if(same()){   // 判断 
    			cout<<180<<endl;
    			continue;
    		}
    	
    		
    		for(int u=0;u<n;u++){   //顺时针270° 
    			for(int v=0;v<n;v++){
    				ans[u][v] = a[v][n-1-u];
    			}
    		}
    		if(same()){   // 判断 
    			cout<<270<<endl;
    			continue;
    		}
    		
    		cout<<-1<<endl; 
    	}
    	return 0;
    }

版本2

大神写的,作为参考

复制代码
    #include <stdio.h>
    #include <stdbool.h>
     
    int mat1[9][9];
    int mat2[9][9];
    int n;
     
    int main()
    {
    while (~scanf("%d", &n))
    {
        for (int i = 0; i < n; ++i)
            for (int j = 0; j < n; ++j)
                scanf("%d", &mat1[i][j]);
        for (int i = 0; i < n; ++i)
            for (int j = 0; j < n; ++j)
                scanf("%d", &mat2[i][j]);
        bool r0, r90, r180, r270;
        r0 = r90 = r180 = r270 = true;
        for (int i = 0; i < n; ++i)
        {
            for (int j = 0; j < n; ++j)
            {
                if (r0)
                    r0 = mat1[i][j] == mat2[i][j];
                if (r90)
                    r90 = mat1[i][j] == mat2[j][n - 1 - i];
                if (r180)
                    r180 = mat1[i][j] == mat2[n - 1 - i][n - 1 - j];                                                                           
                if (r270)
                    r270 = mat1[i][j] == mat2[n - 1 - j][i];
            }
        }
       if (r0)
           printf("%d\n", 0);
       else if (r90)
           printf("%d\n", 90);
        else if (r180)
           printf("%d\n", 180);
        else if (r270)
           printf("%d\n", 270);
        else
           printf("%d\n", -1);
    }
    return 0;
    }

全部评论 (0)

还没有任何评论哟~