有几个水洼(DFS)

 

 

 

 

 

 

#include <iostream>  
#include<cstdio>  
using namespace std;  
#define maxn 105  
char field[maxn][maxn];  
int n,m;  
void dfs(int x,int y)  
{  
     field[x][y]='.';//注意要改成. 
     for(int dx=-1;dx<=1;dx++)  
        for(int dy=-1;dy<=1;dy++) //八连通,八个方向都要dfs 
         {
             int xx=x+dx,yy=y+dy;
             if(xx>=0&&xx<n&&yy<m&&yy>=0&&field[xx][yy]=='W') dfs(xx,yy);
         }
}  
void solve()  
{  
     int ans=0;
     for(int i=0;i<n;i++)
         for(int j=0;j<m;j++)
             if(field[i][j]=='W') 
             {
                 dfs(i,j);
                 ans++;//dfs几次就代表有几个水洼 
             }
     
     cout<<ans;
}  
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; 
}  

 

posted @ 2020-01-31 14:28  Tomorrow1126  阅读(171)  评论(0编辑  收藏  举报