DFS深搜入門(2)
阿新 • • 發佈:2018-12-11
Lake Counting(Poj 2386) 園子有多少水窪。
#include<iostream> #include<cstdio> #include<stack> #include<queue> using namespace std; const int maxn=1e2+5; int a[maxn]; int n,m; char field[maxn][maxn]; void dfs(int x,int y)//現在的位置(x,y) { field[x][y]='.';//將現在的位置替換為. for(int dx=-1;dx<=1;dx++) { for(int dy=-1;dy<=1;dy++) { //向x方向移動dx,向y的方向移動dy,移動的結果為(nx,ny) int nx=x+dx,ny=y+dy; //判斷nx,ny是不是在園子內,以及是否有積水 if(0<=nx&&nx<n&&0<=ny&&ny<m&&field[nx][ny]=='W') dfs(nx,ny); } } return ; } void solve() { int res=0; for(int i=0;i<n;i++) { for(int j=0;j<m;j++) { if(field[i][j]=='W') {//從有W的地方開始dfs dfs(i,j); res++; } } } printf("%d\n",res); } int main() { cin>>n>>m; for(int i=0;i<n;i++) { for(int j=0;j<m;j++) cin>>field[i][j]; } solve(); return 0; }