[USACO10OCT]Lake Counting S

题目链接 https://www.luogu.com.cn/problem/P1596

又双叒是一道dfs,  看到其他dalao们有用bfs做的,好叭,可是我不会

八连通积水

据题意是要求出有多少片水坑,可能一片大水坑中会有连通的旱地“.”或洼地“W”


 

接下来讲一下思路:

找到一个'W',将其替换成'.',然后以这个点为中心遍历八方,直到周围全部为'.',return后水坑数目+1,继续寻找下一个水坑


 

放AC代码:

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 int n,m,ans=0;
 4 char a[110][110];
 5 void dfs(int x,int y)
 6 {
 7     a[x][y]='.';//标记此点已走
 8     int dx,dy;
 9     for(int i=-1;i<=1;i++)//搜索四周
10     {
11         for(int j=-1;j<=1;j++)
12         {
13             dx=x+i;
14             dy=y+j;
15             if(dx>=0&&dx<n&&dy>=0&&dy<m&&a[dx][dy]=='W')//四周的点不超过边界且为W
16                 dfs(dx,dy);//深入搜索
17         }
18     }
19     return;//在void中return为返回上一值,表示如果不能继续深搜就返回上面的点继续搜索
20 }
21 int main()
22 {
23     ios::sync_with_stdio(false);
24     cin>>n>>m;
25     for(int i=0;i<n;i++)
26         cin>>a[i];
27     for(int i=0;i<n;i++)
28     {
29         for(int j=0;j<m;j++)
30         {
31             if(a[i][j]=='W')
32             {
33                 dfs(i,j);
34                 ans++;
35             }
36         }
37     }
38     cout<<ans;
39     return 0;
40 }

 

posted @ 2022-03-22 19:46  爱吃虾滑  阅读(56)  评论(0编辑  收藏  举报