紫书UVA 572

dfs+查过的做记号
/*ample Input

1 1
*
3 5
*@*@*
**@**
*@*@*
1 8
@@****@*
5 5
****@
*@@*@
*@**@
@@@*@
@@**@
0 0


Sample Output

0
1
2
2
 */
#include <iostream>
#include<cstring>
using namespace std;
int rr,cc;
int idx[105][105];
char s[105][105];
void dfs(int r,int c,int id)
{
    if(r<0||c<0||r>=rr||c>=cc)return ;
    if(idx[r][c]>0||s[r][c]!='@')return ;
    idx[r][c]=id;
    for(int i=-1;i<=1;i++)
    {
        for(int j=-1;j<=1;j++)
        {
            if(i!=0||j!=0)
                dfs(r+i,c+j,id);
        }
    }

}
int main()
{

    while(cin>>rr>>cc&&rr&&cc)
    {
        memset(idx,0,sizeof(idx));
        for(int i=0;i<rr;i++)
            cin>>s[i];
        int cnt=0;
        for(int i=0;i<rr;i++)
        {
            for(int j=0;j<cc;j++)
            {
                if(idx[i][j]==0&&s[i][j]=='@')dfs(i,j,++cnt);
            }
        }
        cout<<cnt<<endl;

    }
    return 0;
}

posted @ 2018-04-26 00:35  MCQ  阅读(70)  评论(0编辑  收藏  举报