我有一个非常困难的问题要解决,我只是想知道什么算法可以用来找到最快的路线。无向图由正调整和负调整组成,这些调整会影响在迷宫中导航的机器人或事物。我遇到的问题是包含可以是 + 或 - 的循环的迷宫。一个例子可能会有所帮助:-
节点 A 给对象 10 分
节点 B 从对象中取 15
节点 C 给对象 20 分
路线=""
起始节点是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-fords 和 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