曾經下圍棋樂此不疲,雖說棋力總也不漲,最近聽朋友的建議學學算法,找來一本初級的《DSAA》,按照書上的講解或僞代碼寫了一些case,意外地覺得和下圍棋的樂趣有些類似。
這裏用 Dijkstra 算法求有向賦權圖中任一節點到其他所有節點的最小路徑,
該實現的大致思路:
1)將圖裝入一個鄰接表,設所有頂點爲未知,起點距離爲0,其他頂點距離(起點)爲無窮大
2)選擇距離最小的未知頂點,進行處理:
設該頂點爲已知
依次計算起點經由該頂點到其各鄰接點的距離,如小於鄰接點原記錄的距離,則調整距離並記下路徑
3)反覆執行第二步,直到所有頂點已知
4)根據記錄遞歸輸出最小路徑
僞代碼見原書,我的case運行結果如下: