我想在雙向圖中找到從站點A到站點B的最短路徑(如果A連接到B而不是B連接到A),圖表有在分支上沒有重量。問題是這樣發佈
解決(開始,結束,路徑)。
啓動站。
結束目標站。
通過最短路徑傳遞的所有站的路徑列表。圖中任意兩個直接連接的站之間的距離相等。 基地的事實是這樣的:
事實(「Staion1」,「metroline」,「Station2」,「metroline」)。
地鐵線路是直接連接兩個樓層的線路數量。如果第二和第四個參數相同,則站點直接連接。在prolog中使用廣度優先搜索返回最短路徑
line(「Abbesses」,「12」,「Pigalle」,「12」)。
line(「Abbesses」,「12」,「Lamarck Caulaincourt」,「12」)。
line(「Ale'sia」,「4」,「Mouton Duvernet」,「4」)。
line(「Ale'sia」,「4」,「Porte d'Orle'ans」,「4」)。
line(「Alexandre Dumas」,「2」,「Philippe Auguste」,「2」)。
line(「Alexandre Dumas」,「2」,「Avron」,「2」)。
line(「Alma Marcesu」,「9」,「Iena」,「9」)。
編輯: 我試圖解決這個問題,我發現如果使用BFS它會工作得更快。
這裏是我寫的解決方案:
求解(開始,結束,路徑): - solve1([開始],結束,[開始],路徑)。
solve1([P | O],End,Visited,[End |?]): - children(P,S),member(End,S),!
solve1([P | O],End,Visited,Path): -
(不是成員(P,Visited)),子代(P,S),append(O,S,O1),solve1(O1,端,訪問,路徑));
(solve1(O,End,Visited,Path))。
? - 應該是通往目標節點的路徑的列表
唯一的問題是我不知道如何將路徑返回到目標節點。
謝謝你。
告訴我們你是如何開始解決問題,並在那裏你卡住了。看起來你希望別人爲你徹底解決這個問題...... – 2010-12-11 12:31:31