我有一個真正難以解決的問題,我只是想知道什麼算法可以用來找到最快的路線。無向圖包含正面和負面調整,這些調整會影響導航迷宮的機器人或事物。我遇到的問題是包含可以是+或 - 的循環的迷宮。一個示例可能有助於: -用負節點和循環節點遍歷一個圖的最佳算法是什麼
節點A給出10點到對象
節點B,從所述對象
節點C給出20點到對象
route =「」
起始節點是A,endin克節點是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,但是這些只是給出了一個簡單的路徑,而不是一個循環的路徑。
它可以以某種方式或某種形式的啓發式遞歸?
指你的比喻: -
我覺得我得到你的意思,有點假的會更清楚,到目前爲止路線()
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
從例子中,我推斷:「機器人擁有的資源數量,這是一個整數,並且不能被允許降到零。每個節點都有一個值; 「這是正確的嗎? – gcbenison 2012-04-25 18:57:07