我有一个非常困难的问题需要解决,我想知道有什么算法可以用来找到最快的路线。这个无向图由正面和负面调整组成,这些调整会影响一个机器人或物品在迷宫中的导航。我的问题是包含循环的迷宫,它们可以是+或-。下面是一个例子:
节点A给对象10点
节点B从对象中取走15点
节点C给对象20点
route=""
起始节点为A,结束节点为C。
给定以下图形结构:
a(+10)-----b(-15)-----c+20
node() means the node loops to itself - and + are the adjustments
没有循环的节点为c+20,因此节点c的调整量为正20,但没有循环。
如果机器人或对象在其资源中有10个点,则最佳路径将是:
a > b > c the object would have 25 points when it arrives at c
路线="a,b,c"
这很容易实现,接下来的挑战是知道如何回溯到一个好的节点,假设在每个节点处您可以找到其相邻节点和它们的调整级别。下面是下一个例子:
如果机器人只有5个点,则最佳路径为
a > a > b > c the bot would have 25 points when arriving at c
路线="a,a,b,c"
这是一个非常简单的图形,但当您有更多节点时,对于机器人来说很难知道是否在好节点处循环或从一个好节点到另一个好节点,并同时跟踪可能的路线。
这样的路线将成为一个回溯队列。
一个更难的例子会导致来回走很多次。
机器人有10个点。
a(+10)-----b(-5)-----c-30
a > b > a > b > a > b > a > b > a > b > c,剩余5个点。
机器人另一种可能的做法是:
a > a > a > b > c
这是一种更有效的方式,但如何编写程序实现这一点是我的问题之一。
有人知道解决这个问题的好算法吗?我已经研究了Bellman-Ford和Dijkstra,但这些算法只给出了简单的路径而不是循环路径。
它可能以某种方式是递归的或某种启发式形式吗?
关于您的类比:
我想我明白您的意思了,加上一些伪代码会更清晰,到目前为止route()
q.add(v)
best=v
hash visited(v,true)
while(q is not empty)
q.remove(v)
for each u of v in G
if u not visited before
visited(u,true)
best=u=>v.dist
else
best=v=>u.dist