UVA 572 BFS 图论入门

题干略。

注意八连块的遍历方式,秒得很:

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
#define maxn 100+10
#define inf 100000000

char pic[maxn][maxn];
int ltf[maxn][maxn],m,n;

void dfs(int h,int l,int lt){
    if(h<0 || h>=m || l< 0 || l>=n) return;
    if(ltf[h][l]==0 && pic[h][l]=='@'){
        ltf[h][l]=lt;
        for(int i=-1;i<=1;i++)
        for(int j=-1;j<=1;j++)
            if(i!=0 || j!=0 ) dfs(h+i,l+j,lt);
    }
    else 
    return;
}

int main(){
    while(scanf("%d%d",&m,&n)==2 && m && n){
        int cnt=0;
        for(int i=0;i<m;i++) scanf("%s",pic[i]);
        memset(ltf,0,sizeof(ltf));
        for(int i=0;i<m;i++)
        for(int j=0;j<n;j++)
            if(ltf[i][j]==0 && pic[i][j]=='@') dfs(i,j,++cnt);
        cout<<cnt<<endl;
    }
    return 0;
}

 

posted @ 2018-02-09 20:32  柳暗花明_liu  阅读(128)  评论(0编辑  收藏  举报