851. spfa求最短路(用佇列優化bellman——ford演算法)
#include<cstring>
#include<iostream>
#include<algorithm>
#include<cstdio>
#include<queue>
using namespace std;
const int N = 100010;
int h[N],e[N],ne[N],w[N], idx;
bool st[N];//判斷這個點是否已經在佇列中
int dist[N];
int n, m;
void add(int a, int b, int c )
{
e[idx] = b, w[idx] = c, ne[idx] = h[a], h[a] = idx ++;
}
//用更新的點來更新此點所有出邊
int spfa()
{
memset(dist, 0x3f, sizeof dist);
dist[1] = 0;
queue<int> q;
q.push(1);
st[1] = true;
while(q.size())
{
int t = q.front();
q.pop();
st[t] = false;
for(int i = h[t]; i != -1; i = ne[i])
{
int j = e[i];
if(dist[j] > dist[t] + w[i])
{
dist[j] = dist[t] + w[i];
if(!st[j])
{
st[j] = true;
q.push(j);
}
}
}
}
if(dist[n] > 0x3f3f3f3f / 2) return -1;
return dist[n];
}
int main()
{
cin >> n >> m;
memset(h, -1, sizeof h);
while(m --)
{
int a, b, c;
cin >>a >> b >> c;
add(a, b, c);
}
if(spfa() == -1) cout << "impossible";
else cout << spfa();
return 0;
}//來自acwing
相關文章
- 演算法專題 | 10行程式碼實現的最短路演算法——Bellman-ford與SPFA演算法行程
- bellman-ford 單源最短路問題 圖解圖解
- A星、Floyod、Bellman-Ford
- Python 圖_系列之縱橫對比 Bellman-Ford 和 Dijkstra 最短路徑演算法Python演算法
- 最短路-SPFA演算法&Floyd演算法演算法
- POJ 3169(Bellman-Ford演算法,差分約束系統)演算法
- 最短路:求最長最短路
- 【Dijkstra演算法】未優化版+優先佇列優化版演算法優化佇列
- POJ1860 Currency Exchange【Bellman_ford演算法:判斷是否有正環】演算法
- 最短路(DJsktra,spfa,flyd).mdJS
- 三、資料結構演算法-棧、佇列、優先佇列、雙端佇列資料結構演算法佇列
- 01揹包優先佇列優化佇列優化
- 演算法面試(三) 優先佇列演算法面試佇列
- 最詳細版圖解優先佇列(堆)圖解佇列
- 用優先佇列構造Huffman Tree及判斷是否為最優編碼的應用佇列
- codeforces round 974(div.3)E(優先佇列實現dijstra演算法,devc++的優先佇列用greater報錯)佇列JS演算法devC++
- IT名企演算法與資料結構題目最優解--棧和佇列演算法資料結構佇列
- SPFA演算法演算法
- PHP優先佇列PHP佇列
- 求最短路徑——DFS+Floyd演算法演算法
- 陣列模擬佇列 以及佇列的複用(環形佇列)陣列佇列
- STL 優先佇列 用法佇列
- 淺談優先佇列佇列
- 堆與優先佇列佇列
- 最短路-樸素版Dijkstra演算法&堆優化版的Dijkstra演算法優化
- 佇列 優先順序佇列 python 程式碼實現佇列Python
- 棧,佇列,優先順序佇列簡單介面使用佇列
- 效能優化-使用雙buffer實現無鎖佇列優化佇列
- 多重揹包問題的單調佇列優化佇列優化
- netcore下RabbitMQ佇列、死信佇列、延時佇列及小應用NetCoreMQ佇列
- 資料結構與演算法——佇列(環形佇列)資料結構演算法佇列
- 最短路 || 最長路 || 次短路
- 《演算法》- 佇列和棧演算法佇列
- 演算法-棧佇列堆演算法佇列
- spfa最佳化
- 「學習筆記」SPFA 演算法的最佳化筆記演算法
- 一個人的旅行 (dijkstra演算法求最短路)演算法
- 求最短路徑-----迪傑斯特拉演算法演算法