hdu 1312 Red and Black(DFS)

来源:互联网 发布:淘宝网商贷款扣钱 编辑:程序博客网 时间:2024/06/02 22:09

题意:在宽、高不超过20的范围里,从@开始,统计四周有几个.(前后左右,斜方不算)

#include<iostream>#include<cstdio>#include<cstring>using namespace std;char s[30][30];int d[4][2]={0,1,0,-1,1,0,-1,0},vis[30][30];int n,m;void DFS(int a,int b,int t){    vis[a][b]=1;//把是.的标记    int i,x,y;    for(i=0;i<4;i++){        x=a+d[i][0];        y=b+d[i][1];        //printf("%d %d\n",x,y);        if(x>=0&&y>=0&&x<m&&y<n&&s[x][y]!='#'&&!vis[x][y]){            DFS(x,y,t+1);        }    }    return ;}int main(){    int i,j,a,b,ans;    while(scanf("%d%d",&n,&m),n+m){        memset(s,0,sizeof(s));        memset(vis,0,sizeof(vis));        for(i=0;i<m;i++){            scanf("%s",s[i]);            for(j=0;j<n;j++){                if(s[i][j]=='@'){//找到入口                    a=i,b=j;                    break;                }            }        }        //ans=1;        DFS(a,b,1);        for(ans=i=0;i<m;i++){            for(j=0;j<n;j++){//统计被标记.的个数                if(vis[i][j]) ans++;            }        }        printf("%d\n",ans);    }    return 0;}


0 0