hdu 1026 宽搜+标记路径

这是一个使用宽度优先搜索(BFS)解决的图论问题,目标是从起点到终点以最短时间打败所有怪兽。在搜索过程中,需要记录路径,这里通过记录父节点来节省空间。在BFS过程中,逐步扩展节点,不断添加新节点到队列中,直到找到所有可能的路径。由于需要找出所有路径,所以不适合采用贪心策略。代码实现是关键,可以参考作者提供的思路。
摘要由CSDN通过智能技术生成

题意:

        给定一个起点和终点,还有一个图,在图上"."的点,可以花1s的时间走完,如果该点上是一个数,则需要花该数的时间,在该点打败怪兽,给出从起点到终点的所需要的最短的时间。具体输出描述请看题目hdu 1026。


解题思路:

        典型的宽搜题,稍微麻烦点的是,需要在宽搜的时候记录路径,我是采用了记录上一步是从哪个点来的方式。也可以用数组记录下每条线路的整个路径,不过需要很大的空间,还需要一些代码上的优化,我觉得还是记录父亲节点的方式时间和空间的效率更高。

        至于具体的搜索方法,可以在网上搜到很多具体的教程,我就不献丑了,肯定讲的没那些教案全。我的理解是,每次拓展一层节点,比如一开始只能在(0,0)点,有4个方向可以走,将确实可以走的点,记录下来,加入宽搜的数组。这样在这层就有了0~4个可以拓展的点,每个点扩展一遍,就可能有0~16个点,这样循环下去。最终搜出了所有到达终点的路径,加一些剪枝判断就可以大量减少需要添加的点。这是非常显著的,比如你在第一层少加了一个没有价值的点,以后如果有10层,就少了4^10次的操作和更多的空间。这样的优化方法有很多,但是因为这题需要把所有路径搜出来作为比较,不能采用一些方向上的贪心优化,因为不可以一找到结果就退出。

        如果大家有问题,欢迎提问。


代码:

#include <iostr
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值