1. 算法的原理
以源點開始,以源點相連的頂點作為向外延伸的頂點,在所有這些向外延伸的頂點中選擇距源點最近的頂點繼續(xù)向四周延伸(某個頂點被選作繼續(xù)延伸的頂點,則源點到它的最短距離就已經(jīng)確定,我們也不再將其視為向外延伸的頂點了),如果在繼續(xù)延伸的過程中遇到了之前已延伸到的頂點,且當前這次延伸過程使其離源點更近,我們就修正這個距離,直到所有的頂點都被視為繼續(xù)延伸的頂點,此時我們就得到了源點到其它各個頂點的距離。
2. 一個具體的例子
在下面的例子中,模擬了dijkstra算法求解頂點3到其它各個頂點的最短距離。
黑色的頂點表示沒有被延伸到的頂點,此時源點到它的距離為無窮。紅色頂點表示已被延伸到的頂點,紅色頂點旁的數(shù)字表示源點到它的距離。綠色頂點表示源點到該頂點的最短距離已確定。如果源點到某個頂點的距離被修正,我們將用黃色的方框?qū)⑵錁俗ⅰ?/span>
distTo數(shù)組表示源點(下圖中源點為頂點3)到各個頂點的距離,其中綠色的表示最短距離,紅色表示這個距離是否是最短距離還未確定。
edgeTo數(shù)組表示源點3(下圖中源點為頂點3)到各個頂點的路徑,其中綠色的表示最短距離路徑確定,紅色表示這個距離是否是最短距離還未確定。edgeTo[i]表示經(jīng)過頂點i的上一個頂點。