UOJ Logo insilent的博客

博客

#74. 面积

2018-02-23 13:33:28 By insilent

本题思路:

染色

从正方形的四边开始找

数没被染色的块的个数

具体实现:

从正方形的四边开始,如果是0,就把它变成2(区分1)

被1包围的部分因为停止条件不会被染色

所以只需数仍是0的块


以下代码:

#include<cstdio>
#include<iostream>
using namespace std;
int a[20][20],ans;
bool mark[20][20];
void ufind(int x,int y)
{
    if(x<1||y<1||x>10||y>10||a[x][y]!=0)   //防止越界以及停止条件
        return;
    a[x][y]=2;
    ufind(x-1,y);
    ufind(x+1,y);
    ufind(x,y-1);
    ufind(x,y+1);
}
int main()
{
    for(int i=1;i<=10;i++)
        for(int j=1;j<=10;j++)
            scanf("%d",&a[i][j]);
    for(int i=1;i<=10;i++)
    {
        ufind(i,10);
        ufind(i,1);
        ufind(10,i);
        ufind(1,i);
    }
    for(int i=1;i<=10;i++)
    for(int j=1;j<=10;j++)
        if(a[i][j]==0)
            ans++;
    cout<<ans<<endl;
    return 0;
}

1519392762x-1404817587.jpg

评论

luv_letters
**蒟蒻可以问一个问题吗...** 如果我这样写 ```c++ for(int j=1;j<=10;j++){ if(s[i][j]=='1') { if(s[i-1][j]!='1') sss[i-1][j]++; if(s[i+1][j]!='1') sss[i+1][j]++; if(s[i][j+1]!='1') sss[i][j+1]++; if(s[i][j-1]!='1') sss[i][j-1]++; } } ``` 其中sss数组是用来标记1周围的数字的 s就是输入 可是我又发现...如果是这样的数据 0000000000 0001111000 0010001000 0001110000 0000000000 在坐标(3,2)处依然被标记为2; 然后就不会了233 orzzzzzzz
luv_letters
QAQ
insilent
好象是不能用 额额额
NaCl
某翎竟然刚知道要从边沿的**所有**点出发搜一遍…

发表评论

可以用@mike来提到mike这个用户,mike会被高亮显示。如果你真的想打“@”这个字符,请用“@@”。