80分求救!

P1162 填涂颜色

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出现即在圈内),然后填数就好了。


|