java求無向圖最短路徑 dijkstra算法java實(shí)現(xiàn)
Dijkstra(Dijkstra)算法是一種典型的最短路徑路由算法,用于計(jì)算從一個(gè)節(jié)點(diǎn)到所有其他節(jié)點(diǎn)的最短路徑。主要特點(diǎn)是從頭到尾展開。Dijkstra一般有兩種表達(dá)方式,一種是永久和臨時(shí)標(biāo)記,另一
Dijkstra(Dijkstra)算法是一種典型的最短路徑路由算法,用于計(jì)算從一個(gè)節(jié)點(diǎn)到所有其他節(jié)點(diǎn)的最短路徑。主要特點(diǎn)是從頭到尾展開。Dijkstra一般有兩種表達(dá)方式,一種是永久和臨時(shí)標(biāo)記,另一種是開放的,閉表模式采用開閉表模式,采用貪心法的算法策略,一般過程如下:
1。聲明兩個(gè)集合,open和close,open用于存儲(chǔ)尚未遍歷的節(jié)點(diǎn),close用于存儲(chǔ)已遍歷的節(jié)點(diǎn)
2。在初始階段,將初始節(jié)點(diǎn)置于關(guān)閉狀態(tài),將所有其他節(jié)點(diǎn)置于打開狀態(tài)
3。以初始節(jié)點(diǎn)為中心逐層遍歷,得到離指定節(jié)點(diǎn)最近的子節(jié)點(diǎn),將其放入閉合點(diǎn),計(jì)算路徑,直到閉合點(diǎn)包含所有子節(jié)點(diǎn)。代碼示例如下:node對(duì)象用于封裝節(jié)點(diǎn)信息,包括名稱和子節(jié)點(diǎn)[Java]view plain copy public class node{private string name private Map
最短路徑問題是圖論中的一個(gè)經(jīng)典算法問題,其目的是在兩個(gè)節(jié)點(diǎn)之間尋找最短路徑圖(由節(jié)點(diǎn)和路徑組成)。
算法的具體形式包括:1。確定起始點(diǎn)的最短路徑問題,即起始節(jié)點(diǎn)已知時(shí)尋找最短路徑的問題。
2. 確定終點(diǎn)的最短路徑問題與確定起點(diǎn)的問題相反,問題是在終點(diǎn)已知的情況下尋找最短路徑。在無向圖中,問題等價(jià)于起點(diǎn)的確定問題。在有向圖中,問題等價(jià)于通過反轉(zhuǎn)所有路徑的方向來確定起點(diǎn)的問題。
3. 確定起點(diǎn)和終點(diǎn)之間最短路徑的問題是在已知起點(diǎn)和終點(diǎn)的情況下,求兩個(gè)節(jié)點(diǎn)之間的最短路徑。
4. 全局最短路徑問題-尋找圖中的所有最短路徑。
涉及的算法包括Dijkstra算法、a*算法、SPFA算法、Bellman-Ford算法、Floyd-Warshall算法、Johnson算法等
可根據(jù)不同的需要選擇不同的算法。