HDU 1312

题意:‘.’代表黑色瓷砖,‘#’代表红色瓷砖,‘@’代表一个人的起始位置,问这个人最多能踩到多少黑色瓷砖,注意注意!!!先输入列在输入行。

思路:也是典型的dfs,但是这里每访问一个黑色瓷砖的话,就标记为‘#’,代表不能再访问他了,因为在此访问的话,总数就不对了。(为此本弱调试了半小时才发现)

 

 1 #include<cstdio>
 2 #include<cmath>
 3 #include<cstring>
 4 const int qq=20+5;
 5 int n,m,tot;
 6 char map[qq][qq];
 7 int dir[4][2]={{1,0},{-1,0},{0,1},{0,-1}};
 8 void dfs(int x,int y)
 9 {
10     ++tot;
11     for(int i=0;i<4;++i){
12         int tx,ty;
13         tx=x+dir[i][0];ty=y+dir[i][1];
14         if(tx<0||ty<0||tx>=n||ty>=m||map[tx][ty]=='#')
15             continue;
16         map[tx][ty]='#';
17         dfs(tx,ty);
18     }
19     return;
20 }
21 int main()
22 {
23     while(scanf("%d%d",&m,&n)&&(n||m))
24     {    
25         int sx,sy;
26         getchar();
27         for(int j,i=0;i<n;++i){
28             for(j=0;j<m;++j){
29                 map[i][j]=getchar();
30                 if(map[i][j]=='@'){
31                     sx=i;sy=j;map[i][j]='#';
32                 }
33             }
34             getchar();
35         }
36         tot=0;
37         dfs(sx,sy);
38         printf("%d\n",tot);
39     }
40 }

 

posted @ 2016-01-19 23:14  我不萌、我要高冷  阅读(358)  评论(0编辑  收藏  举报