poj-1979 dfs

 1 #include"cstring"
 2 #include"cstdio"
 3 const int maxn=20+5;
 4 char tile[maxn][maxn];//方块格子 
 5 int m,n,idx[maxn][maxn];//m行n列 ,idx判断是否访问过 
 6 int a[]={-1,0,1,0};
 7 int b[]={0,-1,0,1};//移动 
 8 int num; //黑格子数目 
 9 void dfs(int r,int c){
10     if(r<0||r>=m||c<0||c>=n)    return;//出界
11     if(idx[r][c]>0||tile[r][c]=='#')    return;    //已经访问的格子或者红色格子
12     idx[r][c]=++num;//如果tile未访问过,标记访问,num+1
13     for(int i=0;i<4;i++){
14         dfs(r+a[i],c+b[i]);
15     }
16 }
17 int main(){
18     while(scanf("%d%d",&n,&m)==2&&n&&m){
19         for(int i=0;i<m;i++)
20             scanf("%s",tile[i]);
21         memset(idx,0,sizeof(idx));
22         num=0;
23         for(int i=0;i<m;i++)
24             for(int j=0;j<n;j++)
25                 if(tile[i][j]=='@'){
26                     
27                     dfs(i,j);
28                     break;
29                 }
30         printf("%d
",num);
31     }
32     return 0;
33 }
34  
原文地址:https://www.cnblogs.com/hutonm/p/5475059.html