最短路徑問題

2022-07-30 23:27:19 字數 1776 閱讀 8463

在網路中,求兩個不同頂點之間的所有路徑中,邊的權值之和最小的那一條路徑

單源最短路徑問題:從某固定源點出發,求其到所有其他頂點的最短路徑。

多源最短路徑問題:求任意兩項頂點間的最短路徑。

按照遞增(非遞減)的順序找出到各個頂點的最短路

一層一層找點

1

/*鄰接表儲存 - 無權圖的單源最短路演算法 */2

3/*dist和path全部初始化為-1 */4

void unweighted ( lgraph graph, int dist, int

path, vertex s )

522 } /*

while結束

*/23 }

鄰接表儲存 - 無權圖的單源最短路演算法

按照遞增的順序找出到各個頂點的最短路徑(dijkstra演算法)

/*鄰接矩陣儲存 - 有權圖的單源最短路演算法 */2

3 vertex findmindist( mgraph graph, int dist, int

collected )

4 14}

15if (mindist < infinity) /*

若找到最小dist

*/16

return minv; /*

返回對應的頂點下標

*/17

else

return error; /*

若這樣的頂點不存在,返回錯誤標記

*/18}19

20bool dijkstra( mgraph graph, int dist, int

path, vertex s )

2134

/*先將起點收入集合

*/35 dist[s] = 0

;36 collected[s] = true;37

38while (1

) 54

}55 } /*

while結束

*/56

return

true; /*

演算法執行完畢,返回正確標記

*/57 }

鄰接矩陣儲存 - 有權圖的單源最短路演算法

方法1:直接將單源最短路演算法呼叫|v|遍

方法2:floyd演算法

t=o(|v|3)                             對於稠密圖效果好

floyd演算法

1

/*鄰接矩陣儲存 - 多源最短路演算法 */2

3bool

floyd( mgraph graph, weighttype d[maxvertexnum], vertex path[maxvertexnum] )413

14for( k=0; knv; k++)

15for( i=0; inv; i++)

16for( j=0; jnv; j++)

17if( d[i][k] + d[k][j]

23return

true; /*

演算法執行完畢,返回正確標記

*/24 }

鄰接矩陣儲存 - 多源最短路演算法

最短路 最短路徑問題

題目描述 平面上有n個點 n 100 每個點的座標均在 10000 10000之間。其中的一些點之間有連線。若有連線,則表示可從乙個點到達另乙個點,即兩點間有通路,通路的距離為兩點直線的距離。現在的任務是找出從一點到另一點之間的最短路徑。input 共有n m 3行,其中 第一行為乙個整數n。第2行...

Codeup最短路徑 最短路徑問題

給你n個點,m條無向邊,每條邊都有長度d和花費p,給你起點s終點t,要求輸出起點到終點的最短距離及其花費,如果最短距離有多條路線,則輸出花費最少的。輸入n,m,點的編號是1 n,然後是m行,每行4個數 a,b,d,p,表示a和b之間有一條邊,且其長度為d,花費為p。最後一行是兩個數 s,t 起點s,...

最短路徑之最短路徑問題

提交 狀態 討論版 命題人 外部匯入 題目描述 平面上有n個點 n 100 每個點的座標均在 10000 10000之間。其中的一些點之間有連線。若有連線,則表示可從乙個點到達另乙個點,即兩點間有通路,通路的距離為兩點間的直線距離。現在的 任務是找出從一點到另一點之間的最短路徑。輸入共n m 3行,...