1. 算法的原理

以源點(diǎn)開始,以源點(diǎn)相連的頂點(diǎn)作為向外延伸的頂點(diǎn),在所有這些向外延伸的頂點(diǎn)中選擇距源點(diǎn)最近的頂點(diǎn)繼續(xù)向四周延伸(某個(gè)頂點(diǎn)被選作繼續(xù)延伸的頂點(diǎn),則源點(diǎn)到它的最短距離就已經(jīng)確定,我們也不再將其視為向外延伸的頂點(diǎn)了),如果在繼續(xù)延伸的過程中遇到了之前已延伸到的頂點(diǎn),且當(dāng)前這次延伸過程使其離源點(diǎn)更近,我們就修正這個(gè)距離,直到所有的頂點(diǎn)都被視為繼續(xù)延伸的頂點(diǎn),此時(shí)我們就得到了源點(diǎn)到其它各個(gè)頂點(diǎn)的距離。

2. 一個(gè)具體的例子

在下面的例子中,模擬了dijkstra算法求解頂點(diǎn)3到其它各個(gè)頂點(diǎn)的最短距離。

黑色的頂點(diǎn)表示沒有被延伸到的頂點(diǎn),此時(shí)源點(diǎn)到它的距離為無窮。紅色頂點(diǎn)表示已被延伸到的頂點(diǎn),紅色頂點(diǎn)旁的數(shù)字表示源點(diǎn)到它的距離。綠色頂點(diǎn)表示源點(diǎn)到該頂點(diǎn)的最短距離已確定。如果源點(diǎn)到某個(gè)頂點(diǎn)的距離被修正,我們將用黃色的方框?qū)⑵錁?biāo)注。

distTo數(shù)組表示源點(diǎn)(下圖中源點(diǎn)為頂點(diǎn)3)到各個(gè)頂點(diǎn)的距離,其中綠色的表示最短距離,紅色表示這個(gè)距離是否是最短距離還未確定。

edgeTo數(shù)組表示源點(diǎn)3(下圖中源點(diǎn)為頂點(diǎn)3)到各個(gè)頂點(diǎn)的路徑,其中綠色的表示最短距離路徑確定,紅色表示這個(gè)距離是否是最短距離還未確定。edgeTo[i]表示經(jīng)過頂點(diǎn)i的上一個(gè)頂點(diǎn)。

網(wǎng)友評(píng)論