hdu 1312 Red and Black 解题报告

本文详细解析HDU 1312题目,通过实例展示如何运用深搜算法解决迷宫寻路问题,并强调了在编程中注意细节的重要性。特别提醒读者区分坐标系的行列定义,避免常见错误,确保算法正确运行。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目链接: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 }

 

 

转载于:https://www.cnblogs.com/windysai/archive/2013/04/22/3036626.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值