hdu1241简单搜索题

hdu1241

#include
using namespace std;
char area[110][110];
int flag[110][110];
int anext[8][2]={
     {
     1,1},{
     1,0},{
     1,-1},{
     -1,1},{
     -1,0},{
     -1,-1},{
     0,1},{
     0,-1}};
int a,b;
void dfs(int i,int j){
     
    for(int k=0;k<8;k++){
     
        int ii = i+anext[k][0];
        int jj = j+anext[k][1];
        if(area[ii][jj]=='@'&&ii>=0&&ii<a&&jj>=0&&jj<b&&flag[ii][jj]==0){
     
            flag[ii][jj]=1;
            dfs(ii,jj);
        }
    }
}
int main(){
     

    while(cin>>a>>b&&a!=0&&b!=0){
     

        for(int i=0;i<a;i++){
     
            for(int j=0;j<b;j++){
     
                cin>>area[i][j];
                flag[i][j]=0;
            }
        }
        int sum =0;
        for(int i=0;i<a;i++){
     
            for(int j=0;j<b;j++){
     
                if(area[i][j]=='*'){
     
                    continue;
                }
                else{
     
                    if(flag[i][j]==0){
     
                        sum++;
                        flag[i][j]=1;
                        dfs(i,j);

                    }
                }
            }
        }
        cout<<sum<<endl;
    }
return 0;
}

你可能感兴趣的:(acm竞赛,dfs,算法)