POJ No.2386 Lake Counting

题目链接:http://poj.org/problem?id=2386

分析:八联通的则为水洼,我们则需遍历一个单位附近的八个单位并将它们都改成'.',但附近单位可能仍连接着有'W'的区域,这种情况下我们应该用dfs遍历到尽头,并将这些联通的W全部改掉,1此dfs后与初始的这个W连接的所有W都替换成了'.',因此直到图中不再存在W为止,最后执行dfs的次数即为水洼的个数。

#include <iostream>
using namespace std;
int n,m;
char a[100][100];
void dfs(int x,int y){
    a[x][y]='.';
    for(int dx=-1;dx<=1;dx++){
        for(int dy=-1;dy<=1;dy++){
            int nx=x+dx,ny=y+dy;
            if(nx>=0&&nx<n&&ny>=0&&ny<m&&a[nx][ny]=='W')    dfs(nx,ny);
        }
    }
    return ;
}
int main(){
    int count=0;
    cin>>n>>m;
    for(int i=0;i<n;i++){
        for(int j=0;j<m;j++){
            cin>>a[i][j];
        }
    }
    for(int i=0;i<n;i++){
        for(int j=0;j<n;j++){//先从任意一个有dfs的地方开始 
            if(a[i][j]=='W'){
                dfs(i,j);
                count++;
            }
        }
    }
    cout<<count<<endl;
}

猜你喜欢

转载自www.cnblogs.com/qingjiuling/p/9360763.html