Dijkstra(歪果仁的名字真是長。。。)

2022-03-21 22:37:54 字數 1440 閱讀 6711

dijkstra演算法又稱為單源最短路徑,所謂單源是在乙個有向圖中,從乙個頂點出發,求該頂點至所有可到達頂點的最短路徑問題。 

設g=(v,e)是乙個有向圖,v表示頂點,e表示邊。它的每一條邊(i,j)屬於e,都有乙個非負權w(i,j),在g中指定乙個結點v0,要求把從v0到g的每乙個接vj(vj屬於v)的最短有向路徑找出來(或者指出不存在)。

dijstra演算法是運用貪心的策略,從源點開始,不斷地通過相聯通的點找出到其他點的最短距離

基本思想是:

設定乙個頂點的集合s,並不斷地擴充這個集合,乙個頂點屬於集合s當且僅當從源點到該點的路徑已求出。開始時s中僅有源點,並且調整非s中點的最短路徑長度,找當前最短路徑點,將其加入到集合s,直到終點在s中。

基本步驟:

1、把所有結點分成兩組:

第一組:包括已經確定最短路徑的結點;

第二組:包括尚未確定最短路徑的結點。

2、開始時,第一組只包含起點,第二組包含剩餘的點;

3、用貪心的策略,按最短路徑長度遞增的順序把第二組的結點加到第一組去,直到v0可達的所有結點都包含於第一組中。在這個過程中,不斷更新最短路徑,總保持從v0到第一組各結點的最短路徑長度dist都不大於從v0到第二組任何結點的路徑長度。

4、每個結點對應乙個距離值,第一組結點對應的距離就是v0到此結點的最短路徑長度,第二組結點對應的距離值就是v0由第一組結點到此結點的最短路徑長度。

5、直到所有的頂點都掃瞄完畢(v0可達的所有結點都包含於第一組中),找到v0到其它各點的所有最短路徑。

#include

#include

#include

using namespace std;

const int inf=999999;

const int n=100;

int dis[n],c[n][n],prev[n];

int n,m;

void dijkstra(int sta)

dis[sta]=0;

for(int i=2; i<=n; i++)}}

}}void search(int sta,int end)

que[tot]=sta;

for(int i=tot;i>0;i--)

i==1?cout<";

}int main()

{cin>>n>>m;

int p,q,len;

int i,j;

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

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

c[i][j]=inf;

while(m--)

{cin>>p>>q>>len;

if(len/* shuru57

1 2 10

1 4 30

1 5 100

2 3 50

3 5 10

4 3 20

4 5 60

*/

中國外賣有多火?歪果仁 簡直救了我的命

程式設計驛站 www.cppcns.com 8月23日 訊息今天中午吃啥glfhl?點外賣 對於我們懶人來說,外賣大概是這個世上最偉大的發明之一了 你知道歪果仁愛上中國的n個理由,其中有一項就是 外賣 看來中國的美食正逐漸俘獲外國人的心。某節目街頭採訪了幾位歪果仁對中國外賣的看法,他們的回答也是讓人...

故宮為什麼是歪的

從地圖看,故宮是歪的,不是正南正北,而是南偏東一點 我們都知道,北京為都城,而故宮處在北京中軸線上,北京故宮的建築不應該是正南正北的。那麼為什麼歪了呢?風水上認為正南正北正東正西位有著巨大的煞氣和衝,正位置正好坐落在正南正北,會每天被煞氣衝撞。常人要躲開這幾個正方向。一些墓地 墓穴的位置也不能是正南...

最短的名字

在乙個奇怪的村子中,很多人的名字都很長,比如aaaaa,bbb and abababab。名字這麼長,叫全名顯然起來很不方便。所以村民之間一般只叫名字的字首。比如叫 aaaaa 的時候可以只叫 aaa 因為沒有第二個人名字的前三個字母是 aaa 不過你不能叫 a 因為有兩個人的名字都以 a 開頭。村...