HDU 1241 DFS

#include <iostream>
#include <cstdio>
#include <cstring>

using namespace std;

int m,n;
char s[110][110];
int vis[110][110];

void dfs(int x,int y,int v)
{
    if(x<m&&x>=0&&y<n&&y>=0&&s[x][y]=='@'&&vis[x][y]==0)
    {
        vis[x][y]=v;
        for(int r=-1;r<=1;r++)
            for(int d=-1;d<=1;d++)
            if(r!=0||d!=0)
            dfs(x+r,y+d,v);
    }
}

int main()
{
    while(cin>>m>>n&&m&&n)
    {
        for(int i=0;i<m;i++)scanf("%s",s[i]);
        memset(vis,0,sizeof(vis));
        int ans=0;
        for(int i=0;i<m;i++)
            for(int j=0;j<n;j++)
            if(s[i][j]=='@'&&vis[i][j]==0)
            dfs(i,j,++ans);
        cout<<ans<<endl;
    }
    return 0;
}

猜你喜欢

转载自www.cnblogs.com/HadesBlog/p/9615226.html
今日推荐