hdu 1312 Red and Black 解题报告

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

  第二条深搜,题目并不难,但是做了我好久好久,由于一个细节,让我赌上了一个晚上的时间。

  题目大意:从图中的标记'@'开始,向四个相邻的方向找黑色瓷片'.' ,统计能经过的黑色瓷片的数目('@'也算统计中的一个),当然,这个人是不能走红色瓷片'#'的。

     有两个地方需要注意:1、要分清w、h,哪一个对应行,哪一个表示列,非常别扭,最好不要按它的(w:列 h:行)     2、统计符合条件的 '.' 时,不要遗漏了对初始位置'@'的统计。

     总结: 细心真的非常非常重要!!!!

 1 #include <iostream>
 2 using namespace std;
 3 
 4 char map[25][25];
 5 int h, w, num;
 6 
 7 void dfs(int i, int j)
 8 {
 9     if (map[i][j] != '.' || i < 0 || j < 0 || i >= h || j >= w)
10         return;
11     else
12     {
13         num++;      //找到'.'就统计
14         map[i][j] = '#';
15         dfs(i-1, j);
16         dfs(i, j+1);
17         dfs(i+1, j);
18         dfs(i, j-1);
19     }
20 }
21 
22 int main()
23 {
24     int i, j, k, l;
25     while (cin >> w >> h && (w || h))
26     {
27         num = 0;
28         for (i = 0; i < h; i++)    //h的位置之前写成了w,
29         {
30             for (j = 0; j < w; j++)  //w的位置之前写成了h,下面的for语句也是这样,找了很久才发现这个bug
31 
32                 cin >> map[i][j];
33         }
34         for (i = 0; i < h; i++)
35         {
36             for (j = 0; j < w; j++)
37             {
38                 if (map[i][j] == '@')
39                 {
40                     map[i][j] = '.';
41                     dfs(i, j);
42                 }
43             }
44         }
45         cout << num << endl;
46     }
47     return 0;
48 }

 

 

posted @ 2013-04-22 21:11  windysai  阅读(179)  评论(0编辑  收藏  举报