MarvinWang @ 2022-01-29 22:03:34
最后一个点™暴力枚举通不了,求救!
#include<iostream>
using namespace std;
int a[35][35],n;
int sb(int i,int j){
int k,x=0,y=0,z=0,s=0;
if(a[i][j]==1)
return 1;
for(k=i;k>=1;k--)
if(a[k][j]==1){
x=1;
break;
}
for(k=i;k<=n;k++)
if(a[k][j]==1){
y=1;
break;
}
for(k=j;k>=1;k--)
if(a[i][k]==1){
z=1;
break;
}
for(k=j;k<=n;k++)
if(a[i][k]==1){
s=1;
break;
}
if((x==1)&&(y==1)&&(z==1)&&(s==1))
return 2;
else
return 0;
}
int main(){
int i,j;
cin>>n;
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
cin>>a[i][j];
for(i=1;i<=n;i++){
for(j=1;j<=n;j++){
a[i][j]=sb(i,j);
cout<<a[i][j]<<" ";
}
cout<<endl;
}
return 0;
}
by wowwowwow @ 2022-02-19 21:22:37
思路和我之前一模一样!有缘人啊
主要是思路不对,要用搜索(具体去看题解)
照你的思路,如果遇到"C"(两边勾起来)的闭合圈就过不了
by liuhaopeng @ 2022-07-28 13:34:47
用广度优先搜索,判断数组每个位置的数是否在圈内(上下左右都有数字1出现即在圈内),然后填数就好了。