hdu 1241(dfs基础题)

来源:互联网 发布:仙知机器人 冯源 编辑:程序博客网 时间:2024/06/10 07:51

nm的图有多少连通块

把每个@遍历一遍,bfs八个方向搜一下,搜过的标记为*

#include <iostream>#include <cstring>using namespace std;char a[105][105];int n,m;int ans;void init(){    ans=0;    for(int i=0;i<n;i++)    {        for(int j=0;j<m;j++)        {            cin>>a[i][j];        }    }}void dfs(int x,int y){    if(x>=n||y>=m||x<0||y<0)        return;    if(a[x][y]=='*')        return;        else{    a[x][y]='*';     dfs(x,y+1);    dfs(x,y-1);    dfs(x+1,y);    dfs(x-1,y);    dfs(x-1,y-1);    dfs(x-1,y+1);    dfs(x+1,y-1);    dfs(x+1,y+1);}}int main(){    while(cin>>n>>m&&(n+m))    {        init();        for(int i=0;i<n;i++)        {            for(int j=0;j<m;j++)            {                if(a[i][j]=='@')                {                    dfs(i,j);                    ans++;                }            }        }        cout<<ans<<endl;    }    return 0;}


0 0