spfa演算法
#include
using
namespace std;
const
int n=
1e4+
10,m=
5e5+10;
int n,m,x,y,z,s,cnt,dis[n]
,vis[n]
,head[n]
;struct edge
e[m]
;//定義邊的三個資訊,w表示邊權,to表示邊的終點,next表示上一條邊
void
add(
int x,
int y,
int z)
//鏈式前向星存邊
queue<
int>q;
void
spfa()
}}}int
main()
for(
int i=
1;i<=n;i++
)//dis陣列初始化
dis[i]
=2147483647
;spfa()
;for
(int i=
1;i<=n;i++
) i==n?
printf
("%d\n"
,dis[i]):
printf
("%d "
,dis[i]);
return0;
}
/*
思路:用鏈式向前星儲存頂點之間的關係與權值
用優先佇列儲存邊權小的先出
首先將起點入隊,向四周發散,再將起點與到達點的總權值入隊,
保證了是一步一步到達(如果不連通不可能遍歷到),同時遍歷的過程當中不斷找更小的權值並更新
優先佇列的用處:若有兩種不同的到達方式,優先佇列會先遍歷到短的那一條,然後將其入隊,那遠的一條就不會入隊。
*/#include
using
namespace std;
typedef
long
long ll;
const
int n=
5e5+
10,m=
2e5+10;
int n,m,s,x,y,z,cnt,vis[n]
,head[n]
;long
long dis[n]
;struct edge
e[n]
;void
add(
int x,
int y,
int z)
struct node
;bool
operator
<
(const node &s1,
const node &s2)
priority_queueq;
void
dij())
;//起點入隊
dis[s]=0
;//起點路程為0
while
(!q.
empty()
));//將終點入隊}}
}}intmain()
for(
int i=
0;i<=n;i++
) dis[i]
=2147483647
;dij()
;for
(int i=
1;i<=n;i++
)printf
("%lld "
,dis[i]);
return0;
}
思路就是將最短路上的路徑遍歷一遍,都堵一次,找花費時間最大的。
/*
思路:用鏈式向前星儲存頂點之間的關係與權值
用優先佇列儲存邊權小的先出
首先將起點入隊,向四周發散,再將起點與到達點的總權值入隊,
保證了是一步一步到達(如果不連通不可能遍歷到),同時遍歷的過程當中不斷找更小的權值並更新
優先佇列的用處:若有兩種不同的到達方式,優先佇列會先遍歷到短的那一條,然後將其入隊,那遠的一條就不會入隊。
*/#include
using
namespace std;
const
int n=
1e3+
10,m=
2e5+10;
int n,m,s,x,y,z,cnt,vis[n]
,head[n]
,st,ed,flag;
int dis[n]
,last[n]
;struct edge
e[n*n]
;void
add(
int x,
int y,
int z)
struct node
;bool
operator
<
(const node &s1,
const node &s2)
//過載運算子,優先佇列中的自定義排序
//注意寫大於號還是小於號與實際的符號相反,實際是小於號,則要寫大於號
priority_queueq;
void
dij())
; dis[s]=0
;while
(!q.
empty()
));}
}}}int
main()
dij();
int ans=0;
ed=n;
flag=1;
while
(ed!=1)
cout
}
dijkstra演算法和spfa演算法
void dijkstra s u 1 將這個點標記 證明以後可以使用這個點作為中間點了 for int j 1 j n j spfa模板 struct edge edge maxm 結構體表示靜態鄰接表 void addedge int from,int to,int dis 鄰接表建圖 void...
Bellman Ford演算法 和 SPFA演算法
bellman ford演算法是求含負權圖 的單源最短路徑演算法,效率很低,但 很容易寫。即進行不停地鬆弛 relaxation 每次鬆弛把每條邊都更新一下,若n 1次鬆弛後還能更新,則說明圖中有負環 即負權迴路,本文最後有解釋 無法得出結果,否則就成功完成。bellman ford演算法有乙個小優...
Bellman Ford演算法和SPFA演算法
最短路徑是圖論中乙個很經典的問題 給定圖g v,e 求一條從起點到終點的路徑,使得這條路徑上經過的所有邊的邊權之和最小。對任意給出的圖g v,e 和起點s 終點t,如何求從s到t的最短路徑。解決最短路徑問題的常用演算法有dijkstra演算法 bellman ford演算法 spea演算法和floy...