1. 程式人生 > 其它 >洛谷 P1596 [USACO10OCT]Lake Counting S

洛谷 P1596 [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 }