歐濤最短路 記錄最短路徑

2022-07-01 08:39:09 字數 1210 閱讀 3298

就是普通的最短路,建圖時點的距離小於m的連雙向邊,自認為寫了很多最短路卻不知道怎麼記錄最短路的路徑。在鬆弛裡記錄就好了,每次鬆弛都記錄被鬆弛點的前驅,這樣當乙個點多次鬆弛的時候,就可以多次更新它的前驅,當它無法鬆弛時就是最短路徑上的點,也就是記錄下來的最後一次鬆弛的前驅。

然後從終點開始遍歷前驅,存在陣列中反向輸出即可輸出最短路徑經過的點。

**如下:

1 #include2

#define mem(a,b) memset(a,b,sizeof(a))

3const

int maxn = 650;4

const

double inf = 0x3f3f3f3f * 1.0;5

using

namespace

std;67

intn, k;

8double

m, dis[maxn];

9int

head[maxn], cnt, vis[maxn];

10int

pre[maxn];

1112

struct

node

13node[maxn];

1617

struct

edge

18edge[maxn *maxn];

2223

structn24

31}no;

3233

void add(int a, int b, double

c)34

4142

void

dij()

4368}69

}70}71

72int

main()

7389}90

}91dij();

92if(dis[n + 1] != inf * 1.0)93

103for(int i=len-1;i > 0;i--)

104 printf("

%d "

,ans[i]);

105 printf("

end\n");

106}

107else

108 printf("

-1\n");

109return0;

110 }

記錄最短路徑經過的點

Codeup最短路徑 最短路徑

n個城市,標號從0到n 1,m條道路,第k條道路 k從0開始 的長度為2 k,求編號為0的城市到其他城市的最短距離。第一行兩個正整數n 2 n 100 m m 500 表示有n個城市,m條道路,接下來m行兩個整數,表示相連的兩個城市的編號。n 1行,表示0號城市到其他城市的最短路,如果無法到達,輸出...

最短路 最短路徑問題

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

最短路徑演算法 最短路

在每年的校賽裡,所有進入決賽的同學都會獲得一件很漂亮的t shirt。但是每當我們的工作人員把上百件的衣服從商店運回到賽場的時候,卻是非常累的!所以現在他們想要尋找最短的從商店到賽場的路線,你可以幫助他們嗎?input 輸入包括多組資料。每組資料第一行是兩個整數n m n 100,m 10000 n...