行路難(SPFA 前驅記錄)

2021-08-22 00:04:48 字數 1399 閱讀 2461

與其留戀,不如灑脫。 —nemt2018後的首題祭

題目來自洛谷p2832,難度(提高+/省選-),自以為應該是(普及/提高-)的黃題。

題目概述:給定一張有向圖,在圖上每進行一次移動,圖的所有邊權都會在原基礎上+1,求算從1到n點的最小邊權和,並輸出這個最短路。

q:那我和節點一樣,也開乙個時間佇列queue< int >t可以嘛?

a:不可以的,考慮一下,如果加上這樣乙個佇列,那就意味著你的t和q要同時進行操作,換句話說,q執行什麼操作,t也得跟著操作。考慮一種比較普遍的情況,假設到達goal節點可以從a或者b點出發,而從a走累計距離長但我們先遍歷,從b走累計距離短但我們後遍歷,這樣的話到達goal節點的時間到底算是從a還是從b呢。(好吧我表達能力差,意思大概就是這樣不行,而且這樣做只能得40分,就是這一段)

錯誤的spfa
int spfa()

}q.pop(),t.pop();}}

正解
#include

#include

#include

#include

#include

using

namespace

std;

int i,j,n,m;

int hd[10001],pre[10001],ans[10001],t[10001];

struct data

a[200001];

int r()

while(ch>='0'&&ch<='9')

return ans;

}int xx,yy,zz,temp;

void add(int x,int y,int z)

queue

q;int dis[10001];

int spfa()

}q.pop();

}}int main()

memset(dis,0x7f7f7f,sizeof(dis));

dis[1]=0;

q.push(1);

spfa();

cout

while(j!=1)

cout

<<1;

for(i=tot;i>=1;i--)

/*5 7

1 5 7

1 2 1

1 4 1

3 5 1

2 3 1

2 4 1

4 5 1

*/

上圖,傳統不能丟。

今天是可愛的埃羅芒阿老師(劃掉)和泉紗霧哦

行路難 開始漫漫程式設計路

大一學習了c語言課程之後,對程式設計還是有些興趣的,用 解決一些小問題很滿足的,尤其是在除錯成功沒有報出奇奇怪怪的錯誤的時候。最興奮的自然是通過了全部的測試樣例,感覺整個人飄飄然嘻嘻!回首大一的c語言課程,真的是入門級的簡單 除了函式 指標 結構體哈 有些是永恆的難點,不管在哪個領域。一門神奇的課在...

洛谷P2832 行路難

題面 思路 最短路問題。加上疲勞度看似很難,但只要用乙個記錄疲勞度的陣列就好啦,另外還需要記錄路徑。include include include include include include define fill a memset a,0x3f3f3f,sizeof a define haha...

最短路(SPFA 前向星

problem description 輸入t,n分別代表有t條通道,和n個地點。接下來t行u,v,w分別表示u地點於v地點之間通道消費,有重複邊 sample input 5 51 2 20 2 3 30 3 4 20 4 5 20 1 5 100 sample output 運用spfa的幾個要...