拯救OIBH总部

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了拯救OIBH总部相关的知识,希望对你有一定的参考价值。

拯救OIBH总部 area

【题目描述】:

OIBH总部突然被水淹没了!现在OIBH需要你的救援……

OIBH被突来的洪水淹没了>.<还好OIBH总部有在某些重要的地方起一些围墙,用*号表示,而一个封闭的*号区域洪水是进不去的……现在给出OIBH的围墙建设图,问OIBH总部没被淹到的重要区域(由"0"表示)有多少。

【输入描述】:

第一行是两个数,xyx,y<=500

第二行及以下是一个由*0组成的x*y的图。

 

【输出描述】:

输出没被水淹没的OIBH总部的“0”的数量。

 

【样例输入】

【样例输出】

4 5

00000

00*00

0*0*0

00*00

1

5 5

*****

*0*0*

**0**

*0*0*

*****

5

【数据范围及描述】:

 

 搜索水题,我并不想多讲

技术分享
 1 #include <iostream>
 2 #include <cstdio>
 3 #include <cstring>
 4 #include <algorithm>
 5 #include <queue>
 6 using namespace std;
 7 
 8 const int maxn=505;
 9 const int dx[]={1,-1,0,0};
10 const int dy[]={0,0,1,-1};
11 char g[maxn][maxn];
12 bool vis[maxn][maxn];
13 int n,m;
14 
15 struct node
16 {
17     int x,y;
18 };
19 
20 int bfs(int x,int y)
21 {
22     queue<node> Q;
23     node top;
24     Q.push((node){x,y});
25     vis[x][y]=true;
26     bool flag=true;
27     int cnt(1);
28     while(!Q.empty())
29     {
30         top=Q.front();
31         Q.pop();
32         if(top.x==1||top.x==n||top.y==1||top.y==m) flag=false;
33         for(int i=0;i<4;i++)
34         {
35             int xx=top.x+dx[i];
36             int yy=top.y+dy[i];
37             if(xx<1||xx>n||yy<1||yy>m)
38             {
39                 flag=false;
40                 continue;
41             }
42             if(!vis[xx][yy]&&g[xx][yy]==0)
43             {
44                 vis[xx][yy]=true;
45                 Q.push((node){xx,yy});
46                 cnt++;
47             }
48         }
49     }
50     if(flag) return cnt;
51     return 0;
52 }
53 
54 
55 
56 int main()
57 {
58     scanf("%d %d\\n",&n,&m);
59     for(int i=1;i<=n;i++)
60         gets(g[i]+1);
61     memset(vis,false,sizeof(vis));
62     int ans(0);
63     for(int i=1;i<=n;i++)
64         for(int j=1;j<=m;j++)
65         {
66             if(g[i][j]==0&&!vis[i][j])
67                 ans+=bfs(i,j);
68         }
69     printf("%d",ans);
70     return 0;
71 }
View Code

技术分享

 

以上是关于拯救OIBH总部的主要内容,如果未能解决你的问题,请参考以下文章

洛谷 P1506 拯救oibh总部DFS/Flood Fill

洛谷 P1506 拯救oibh总部 题解(洪水填充法的模板)

Vijos 1385盗窃-月之眼

vijos- P1385盗窃-月之眼 (水题 + python)

bzoj2259 [Oibh]新型计算机

BZOJ2259[Oibh]新型计算机 最短路