2011-01-05 66 views
1

有誰知道是否有簡單的方法在PHP中尋路?在PHP中簡單尋路

我基本上有一個數字列表,例如,

  • {origin:11485,outboundDirections:"11486,11487,11488"}
  • {origin:11487,outboundDirections:"11485,11676,94185"}

,並正從11485到94185將導致11485>11487>94185各種辦法來「退出」,我試圖找出如何做到這一點(它不」噸真的必須是最短路徑或任何AI狀,只是一種從A到B)

我不知道從哪裏開始播放,遺憾的是

回答

1

對於此問題,您可能需要閱讀breadth-first searchDijkstra's algorithm。這些都是確定最短路徑(廣度優先搜索以最小化跳數,Dijkstra算法將總距離最小化)的完善(並且相當簡單)的算法。

+0

我看BFS,但我似乎無法找到任何PHP基本類或不管它(我已經差不多隻寫了招呼世界吧),我有隻有幾千個節點。對此最好的做法是什麼?將每一個存儲在一個SQL表中,使用Origin和ExitRoute列或給每個退出路由一列(它們不一致,有些可能有一個,有些可能有五個或六個) – pdx 2011-01-05 21:00:59

+0

您對隊列數據結構熟悉嗎?如果您之前沒有看到過,我建議您查看它:http://en.wikipedia.org/wiki/Queue_(data_structure)。一旦你熟悉了這個結構,理解BFS的工作原理可能會更容易一些。有可能你必須自己寫;我不知道任何PHP庫爲你做這個。 – templatetypedef 2011-01-05 21:03:38

+0

我是一位貿易設計師,我不知道排隊是什麼。 Python而不是PHP也可以接受,但我在兩個(none)中都有相同的知識。我必須使用的服務器只有python 2.5,2.6和php5/6。 – pdx 2011-01-05 21:04:30

0

如果這些都類似於圖中A* algorithm可能工作。這是一個非常基本的AI算法,通常是遊戲,但也包括迷宮,導航,最佳路徑。

+0

他只是想要一條路,不在乎長度,所以這是矯枉過正。 – marcog 2011-01-05 20:56:42

+0

確實如此,但它比Dijkstra的算法更快並且是最基本的尋路算法之一。 – 2011-01-05 21:06:31

3

我最近開始和PHP opensourced靈活的尋路腳本,使用A *算法爲主。這個想法是給節點圖對象提供算法需要探索節點圖並獲得H和G成本所需的最基本方法。

它將與你的號碼清單的工作非常容易,因爲它也使用整數參考節點。

參見:https://github.com/Nexii-Malthus/phpPathfinding