Thank_Fine @ 2022-06-14 20:58:27
#include<iostream>
#include<cstdio>
using namespace std;
const int N=35;
int n,m;
int a[N][N];
bool vis[N][N];
bool flag=0,f=0;
int dx[5]={0,1,0,-1};
int dy[5]={1,0,-1,0};
void dfs(int k){
if(k==n+1){
return;
}
for(int i=1;i<=n;i++){
if(a[k][i]==1&&flag==0){
flag=1;
}
if(flag==1&&a[k][i]==0&&i>1&&i<n){
a[k][i]=2;
}
}
dfs(k+1);
}
int main(){
cin>>n;
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
cin>>a[i][j];
}
}
dfs(1);
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
cout<<a[i][j]<<" ";
}
cout<<endl;
}
return 0;
}
by Songnj_office @ 2022-06-14 21:32:54
6
0 0 0 0 0 0
0 0 1 0 1 1
0 1 1 0 0 1
1 1 0 0 0 1
1 0 0 0 0 1
1 1 1 1 1 1
你把那圈1中的一个删掉就不是闭合圈了,但你这还是把它填成了2
by Thank_Fine @ 2022-06-14 21:48:51
@utforever 能在说得详细些吗
by Songnj_office @ 2022-06-14 22:00:10
我给你的数据应该不会被填充,你的代码是看这列有没有1,有1就把第一个1下面的全部填充成2,很明显这个想法会出问题
by Songnj_office @ 2022-06-14 22:07:11
3
1 0 1
1 0 1
1 1 1
这组数据很明显输出和原来保持一致,但是照你的方法会把0填上