32分求助!

P1162 填涂颜色

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填上


|