浙大資料結構 Dijkstra多條最短路徑改良

2021-09-26 19:11:50 字數 682 閱讀 3609

普通的dijkstra只能更新乙個前驅節點和得到單源最短路徑的距離。

那麼如果有多條最短路徑的話,那麼就需要增加一些判斷。主要是在dist[v]+<?dist[w]這個判斷失效後,增加乙個if(dist[v]+==dist[w])的判斷即可;這個判斷面向所有的v的鄰接節點,不管是否已經被收入到最短路徑的集合中。因為如果w是從v發展得到的,那麼此時已經在w點了,這個時候判斷就會是dist[w]+==dist[v],但是由於最短路徑是遞增的,因此如果w是由v發展的,那麼dist[w]本身就比dist[v]大了,更何況加上了,因此不會影響到從v發展過來的情況。

還有一種情況就是收入了v後,鄰接點w也已經被收錄了,那麼容易知道,w因為已經被收錄了,因此可以確定是最短路徑;但是還有乙個問題是可能由其他的最短路徑,因此對w進行更新也是合理的(即使w被收錄了)

bool dijkstra( mgraph graph, int dist, int path, vertex s )

}/*--------------------增加的**判斷部分------------------------------*/

else if(dist[v]+graph->g[v][w]==dist[w])

} /* while結束*/

return true; /* 演算法執行完畢,返回正確標記 */

}

浙大資料結構 單鏈表逆轉

6 8 單鏈表逆轉 20 分 本題要求實現乙個函式,將給定的單鏈表逆轉。list reverse list l 其中list結構定義如下 typedef struct node ptrtonode struct node typedef ptrtonode list 定義單鏈表型別 l是給定單鏈表,...

浙大資料結構學習 快速排序

給定n個 長整型範圍內的 整數,要求輸出從小到大排序後的結果。本題旨在測試各種不同的排序演算法在各種資料情況下的表現。各組測試資料特點如下 資料1 只有1個元素 資料2 11個不相同的整數,測試基本正確性 資料3 103個隨機整數 資料4 104個隨機整數 資料5 105個隨機整數 資料6 105個...

浙大資料結構學習筆記 1 3 什麼是資料結構

陳越老師分別介紹了四種演算法,複雜度逐步降低。由最初的nnn到n n再到nlog n,最後降為n。後面兩種演算法沒有理解,回顧時再看。nt maxsubseqsum1 int a int n return maxsum int maxsubseqsum2 int a int n return max...