POJ2386:Lake Counting(DFS)
Time Limit: 1000MS | Memory Limit: 65536K | |
Total Submissions: 14776 | Accepted: 7496 |
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
MYCode:
#include<iostream>
#include<cstring>
#include<cstdio>
#define MAX 110
char map[MAX][MAX];
bool vis[MAX][MAX];
int dirt[8][2]={{1,0},{-1,0},{0,1},{0,-1},{1,1},{1,-1},{-1,1},{-1,-1}};
using namespace std;
void dfs(int x,int y)
{
vis[x][y]=1;
int i;
int tx,ty;
for(i=0;i<8;i++)
{
tx=x+dirt[i][0];
ty=y+dirt[i][1];
if(!vis[tx][ty] && map[tx][ty]=='W')
{
dfs(tx,ty);
}
}
}
int main()
{
int n,m;
while(scanf("%d%d",&n,&m)!=EOF)
{
int i,j;
memset(vis,0,sizeof(vis));
for(i=1;i<=n;i++)
{
for(j=1;j<=m;j++)
{
cin>>map[i][j];
}
}
int ans=0;
for(i=1;i<=n;i++)
{
for(j=1;j<=m;j++)
{
if(map[i][j]=='W'&&!vis[i][j])
{
ans++;
dfs(i,j);
}
}
}
printf("%d\n",ans);
}
}
//
DFS
【推荐】还在用 ECharts 开发大屏?试试这款永久免费的开源 BI 工具!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步