DFS UVA572

  Sample Input

   1 1

   *

   3 5

   *@*@*

   **@**

   *@*@*

   1 8

   @@****@*

   5 5

   ****@

   *@@*@

   *@**@

   @@@*@

   @@**@

   0 0

   Sample Output

   0

   1

   2

   2
#include<cstdio>
#include<iostream>
using namespace std;
char s[102][102];
int dir[8][2]=
{
    {1,0},
    {1,1},
    {1,-1},
    {0,-1},
    {0,1},
    {-1,0},
    {-1,1},
    {-1,-1}
};
int n,m;
void dfs(int i,int j)
{
    s[i][j]='*';
    for(int k=0;k<8;k++)
    {
        int x=i+dir[k][0];
        int y=j+dir[k][1];
        if(x>=0&&x<n&&y>=0&&y<m&&s[x][y]=='@')
            dfs(x,y);
    }
}
int main()
{
    while(scanf("%d%d",&n,&m)!=EOF)
    {
        int i,j;
        if(n==0||m==0)  break;
        int ans=0;
        for(i=0;i<n;i++)
            for(j=0;j<m;j++)
                cin>>s[i][j];
        for(i=0;i<n;i++)
            for(j=0;j<m;j++)
            if(s[i][j]=='@')
            {
               dfs(i,j);
               ans++;
            }
            printf("%d\n",ans);
    }
}

1.输入要用 cin 或者 scanf(“%s”,s[i]);
2.dfs中int k不用·ij(已经用过,形参)。

猜你喜欢

转载自blog.csdn.net/qq_42964711/article/details/82118889
今日推荐