Red and Black(DFS)

题目链接http://acm.hdu.edu.cn/showproblem.php?pid=1312

 1 #include<iostream>
 2 #include<cstring>
 3 #define mem(a) memset(a,0,sizeof(a));
 4 using namespace std;
 5 const int MAXN =25;
 6 int vis[MAXN][MAXN];
 7 char ma[MAXN][MAXN];
 8 int m,n;
 9 void dfs(int x,int y)
10 {
11     if(x<0||x>=m||y<0||y>=n||ma[x][y]=='#'||vis[x][y]==1)return;
12     vis[x][y]=1;
13     dfs(x-1,y);dfs(x+1,y);dfs(x,y+1);dfs(x,y-1);
14 }
15 int main()
16 {
17     while(cin>>n>>m)
18     {
19         if(!m&&!n)break;
20         mem(vis);mem(ma);
21         int i,j,x,y;
22         for(i=0;i<m;i++)
23             for(j=0;j<n;j++)
24             {
25                 cin>>ma[i][j];
26                 if(ma[i][j]=='@')x=i,y=j;
27             }
28         dfs(x,y);
29         int count=0;
30         for(i=0;i<m;i++)for(j=0;j<n;j++)if(vis[i][j])count++;
31         cout<<count<<endl;
32     }
33     return 0;
34 }

 

posted @ 2013-02-10 17:19  再见~雨泉  阅读(205)  评论(0)    收藏  举报