我正試圖在我正在爲連接節點圖形工作的遊戲中使用更快的尋路機制。節點分爲「網絡」和「路由器」兩種類型。連接節點圖的快速路徑緩存生成
在這幅圖中,藍色圓圈代表路由器和灰色矩形網絡。
每個網絡都會保存它連接到哪個路由器的列表,反之亦然。路由器不能直接連接到其他路由器,並且網絡不能直接連接到其他網絡。
他們所連接
路由器的路由器網絡列表中做同樣的
我需要一個算法,將繪製出的路徑,數量來衡量的網絡交叉,對於每個可能的源網絡和目標網絡,不包括源和目標是相同網絡的路徑。我現在有一個,但它速度慢得不可置信,需要花費大約兩秒來繪製路徑,這對於所有連接的玩家來說都變得非常引人注目。
當前的算法是深度優先的蠻力搜索(它在大約一個小時內被拋在一起,以獲得路徑緩存工作),它以它們遍歷的順序返回一組網絡,這解釋了它爲什麼是太慢了。有沒有更高效的算法?作爲一個側面說明,雖然這些示例圖有四個網絡,但在實踐中有55個網絡和約20個正在使用的路由器。不可能的路徑也可能發生,並且在任何時候網絡/路由器圖形拓撲都可能改變,需要重建路徑緩存。
什麼方法/算法可能會爲這種類型的圖形提供最佳結果?
如果需要,我可以提供用於在提問時構建緩存的代碼 – Sukasa 2010-06-01 05:18:03