| Time Limit: 1000MS | Memory Limit: 65536K | |
| Total Submissions: 8579 | Accepted: 4367 |
Description
Given a diagram of Farmer John's field, determine how many ponds he has.
Input
* Lines 2..N+1: M characters per line representing one row of Farmer John's field. Each character is either 'W' or '.'. The characters do not have spaces between them.
Output
Sample Input
10 12 W........WW. .WWW.....WWW ....WW...WW. .........WW. .........W.. ..W......W.. .W.W.....WW. W.W.W.....W. .W.W......W. ..W.......W.
Sample Output
3
Hint
There are three ponds: one in the upper left, one in the lower left,and one along the right side.
Source
【题意简述】
给出一个M*N的地图,有些地方被雨淹了。
问这些被淹没的地方形成了多少个池塘(连同块)?
( M,N<=100,这里规定任意格子周围的八个格子都是与它相邻的 )
用dfs+染色来实现:
其实和JOJ那道OIL 是一模一样的
#include<stdio.h>
char str[101][101];
int x[8]={-1,0,1,-1,1,-1,0,1},y[8]={-1,-1,-1,0,0,1,1,1};
int num,m,n;
void dfs(int x1,int y1)
{
int i;
str[x1][y1]='.';
for(i=0;i<8;i++)
if(x1+x[i]<m && x1+x[i]>=0 && y1+y[i]<n && y1+y[i]>=0 && str[x1+x[i]][y1+y[i]]=='W')
dfs(x1+x[i],y1+y[i]);
}
int main()
{
while(scanf("%d%d",&m,&n)!=EOF)
{
num=0;
for(int i=0;i<m;i++)
scanf("%s",str[i]);
for(int i=0;i<m;i++)
for(int j=0;j<n;j++)
if(str[i][j]=='W')
{
dfs(i,j);
num++;
}
printf("%d/n",num);
}
return 0;
}
本文介绍了一种通过深度优先搜索(DFS)算法来计算地图上形成的池塘数量的方法。地图由若干个水或陆地组成的网格构成,若水区域相连则视为同一池塘。文章提供了一个具体的C语言实现示例。
439

被折叠的 条评论
为什么被折叠?



