K短路-魔法猪学院(A*算法)+骑士精神(IDA*算法)

这篇博客介绍了如何运用A*算法和IDA*算法解决K短路问题以及骑士精神问题。在K短路问题中,通过Dijkstra或SPFA求最短路,然后反向使用A*算法寻找最大次数。骑士精神问题采用IDA*算法,通过DFS模拟马的移动并设计合适的g(x)函数。
摘要由CSDN通过智能技术生成

K短路-魔法猪学院

题意:给定一个能量值 E E E,以及一些单向边权。求所拥有的能量能从 1 1 1走到 N N N多少次,并且每一次的走法不完全一样,即求最大的 K K K使得 前 K K K短路的和 不大于 E E E

思路:

  1. 建边时将正反边都记录好
  2. 第一遍跑 d i j s t r a dijstra dijstra s p f a spfa spfa将从 1 1 1到所有点最短路求出来,作为 A ∗ A^* A算法的 g ( x ) g_{(x)} g(x)函数
  3. 然后反向跑 A ∗ A^* A算法(即在反向边上跑 B F S BFS BFS),那么如何跑呢?
  4. 我们可以利用优先队列,让 f ( x )
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
A*算法IDA*算法都是启发式搜索算法,它们都是用于解决最短路径问题的常用算法。其中,A*算法在搜索时利用了启发式函数来估计从当前节点到目标节点的距离,从而选择最优的节点进行搜索。而IDA*算法则是在A*算法基础上做出的改进,其主要区别是不使用任何额外的内存空间,而是将估价函数的值作为深度限制,直到找到目标节点或者超过深度限制为止。 具体来说,A*算法维护一个open列表和一个closed列表。open列表中保存了待搜索的节点,closed列表中保存已经被搜索过的节点。每次从open列表中选择一个f值最小的节点进行扩展,并将其加入closed列表中。扩展时,对于当前节点的每个子节点计算估价函数值f(n)=g(n)+h(n),其中g(n)是从起点到当前节点的实际代价,h(n)是从当前节点到目标节点的估计代价。这样,每次选择f值最小的节点进行扩展时,就能够尽可能地朝着目标节点前进。 IDA*算法则是将A*算法中的open列表替换成一个栈,在搜索时将当前搜索深度作为阈值,不断更新阈值来限制搜索深度。具体来说,每次从起点开始,将阈值设置为起点到目标节点的估价函数值,然后进行深度优先搜索。如果搜索到某个节点的f(n)>threshold,则将其返回,并将阈值更新为f(n)。这样,IDA*算法通过不断增加深度限制来逐步逼近最短路径,直到找到目标节点或者搜索到达最大深度。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值