导航

poj2386

Posted on 2018-03-12 00:40  Byyyyy  阅读(129)  评论(0)    收藏  举报

问题描述:


对于一个图,求八连通个数

思路:

直接DFS

 

#include<iostream>
#include<cstdio>
using namespace std;
#define MAXN 150
int N,M;
char Map[MAXN][MAXN];
void dfs(int x,int y){
    Map[x][y]='.';
    for(int dx=-1;dx<=1;dx++){
        for(int dy=-1;dy<=1;dy++){
            int new_x=x+dx;
            int new_y=y+dy;
            if(0<=new_x&&new_x<N&&0<=new_y&&new_y<M&&Map[new_x][new_y]=='W'){
                dfs(new_x,new_y);
            }
        }
    }
}
int main(){
    cin>>N>>M;
    for(int i=0;i<N;i++){
        for(int j=0;j<M;j++){
            cin>>Map[i][j];
        }
    }
    int ans=0;
    for(int i=0;i<N;i++){
        for(int j=0;j<M;j++){
            if(Map[i][j]=='W'){
                Map[i][j]='.';
                dfs(i,j);
                ans++;
            }
        }
    }
    printf("%d\n",ans);
    return 0;
}
View Code