题目介绍
给两个N * N的矩阵A,B。对矩阵A能进行以下操作,对A中所有的(i,j)坐标,能将其取代为(N+1-j,i)的值就是旋转 ,这个操作可以反复执行,你也可以不执行。问是否能使得矩阵A进行过若干次操作后,A矩阵里面所有位置为1的位置在B矩阵中同样为1。如果可以就输出Yes,否则就输出No。
题目思路及代码
反复遍历就行了
#include<bits/stdc++.h>
using namespace std;
#define maxn 104
int a[maxn][maxn];
int b[maxn][maxn];
int c[maxn][maxn];//记录中间过程
int n;
bool check2(){
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
if(a[i][j] == 1){
if(b[i][j]!=1) return false;
}
}
}
return true;
}
int main(){
cin>>n;
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
cin>>a[i][j];
c[i][j]=a[i][j];
}
}
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
cin>>b[i][j];
}
}
// A执行变型操作能不能变成B
bool flag = 0;
int k =1000;
while(k--){
if(check2()){
flag =1;
break;
}
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
a[i][j] = c[n+1-j][i];
}
}
for(int i=1;i<=n;i++){//记录新数组
for(int j=1;j<=n;j++){
c[i][j] = a[i][j];
}
}
}
if(flag) cout<<"Yes"<<endl;
else cout<<"No"<<endl;
return 0;
}
点关注,不迷路