三種最短路並鄰接表的模板

2022-07-14 09:54:12 字數 1578 閱讀 4096

struct node sa[maxn + 5];

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

void floyd (int n) 

for (int j = 1; j <= n; j ++)

if (s[i][k] + s[k][j] < s[i][j])

}} }

} void floyd_empty (int n)

else

} }}

void dijkstra (int h, int n) 

s[h] = 0;//自己與自己距離為0

q.push (make_pair (0, h));//加入優先佇列

while (!q.empty ())

else

for (node *i = sa[a.second].next; i != 0; i = i->next)

} }return ;

}

優先佇列優化
bool spfa_check (int h, int n) 

vis[h] = 1;

while (!q.empty ())

if (!vis[i->ed])

}} }

return 1;

}bool spfa (int h, int n)

q.push (make_pair (0, h));

vis[h] = 1;

s[h] = 0;

while (!q.empty ())

if (!vis[i->ed])

}} }

return 1;

}

無優先佇列優化
bool spfa_check (int h, int n) 

vis[h] = 1;

while (!q.empty ())

if (!vis[i->ed])

}} }

return 1;

}bool spfa (int h, int n)

q.push (h);

vis[h] = 1;

s[h] = 0;

while (!q.empty ())

if (!vis[i->ed])

}} }

return 1;

}

dfs版(由於此方法不適用查最短路, 只適用於判負環, 所以只給出判負環**)
bool spfa_dfs (int h) 

bl &= spfa_dfs (i->ed);

if (!bl)

} }return 1;

}bool spfa_check (int h, int n)

for (int i = 1; i <= n; i ++)

} }return 1;

}

void print (int h, int t) 

else

}

三種最短路的總結

三種最短路演算法的對比 floyd dijkstra bellman ford 空間複雜度 o n 2 0 m 0 m 時間嗎複雜度 o n3 o m n logn o mn 適用情況 稠密圖稠密圖 稀疏圖負權邊 不可以不可以 可以floyd演算法簡單,dijkstra不能解決負權邊優化後可以得到m...

HDU 2544 最短路 SPFA 鄰接表 模板

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

最短路徑是三種求法

說是總結,其實自己也沒有學多長時間只是把自己這段時間的一些經驗總結下來,用來供後來的初學者漲點經驗吧。對於學習演算法,個人的理解就是首先要去理解演算法的本質,然後想想演算法的實現過程,如何用 去描述這個演算法,然後就是去記模板了 對於像我這種初學者來說,這一步其實蠻重要的 另外說下做最短路問題的一些...