UVa572

/*
本题是典型的DFS思路,即在读取当前位置为@时,即刻进行DFS,扫描周围八个方向的位置是否为@
*/
#include <iostream>
#include<cstdio>
#include<string>
#include<map>
#include<vector>
#include<sstream>
#include<string.h>
using namespace std;
 
 
const int maxn=100+5;
char ch[maxn][maxn];
int m,n;
int dx[]={-1,-1,-1,0,0,1,1,1};
int dy[]={-1,0,1,-1,1,-1,0,1};
 
 
bool check(int x,int y){return x>=0&&x<m&&y>=0&&y<n;}
void dfs(int row,int col){
    ch[row][col]='*';
    for(int i=0;i<8;++i){
        int x=row+dx[i],y=col+dy[i];
        if(check(x,y)&&ch[x][y]=='@')dfs(x,y);
    }
}
int main()
{
    while(scanf("%d%d",&m,&n)&&m){
        int ans=0;
        memset(ch,0,sizeof(ch));
        for(int i=0;i<m;++i){
            for(int j=0;j<n;++j)cin>>ch[i][j];
        }
        for(int i=0;i<m;++i){
            for(int j=0;j<n;++j){
                if(ch[i][j]=='@'){
                    ++ans;
                    dfs(i,j);
                }
            }
        }
        printf("%d\n",ans);
    }
    return 0;
}

猜你喜欢

转载自blog.csdn.net/shihongliang1993/article/details/74091499
今日推荐