[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 }