Dijkstra演算法 超 詳細!!

2022-02-28 11:37:15 字數 2081 閱讀 1436

dijkstra演算法

_ ** 時隔多月,我又回來了!**_

今天下午久違的又學了會兒演算法,又重新學習了一遍dijkstra,這是第三次重新學習dijkstra(*以前學的都忘完了》_<*).

廢話先不bb,上**。

#includeusing

namespace

std;

#define inf 9999999

#define m 1000

intd[m];

int p[m]=;

intcon[m][m];

int n,line; //

n點數,邊數line

struct

nodew[m];

void dijkstra(int v,int *d,int p,int con[m][m]) //

初始點v

d[v]=0; //

對第乙個點初始化

vis[v]=1

;

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

第二布,兩重迴圈 ,每次迴圈又分兩步 。判斷所有點

}

vis[id]=1; //

已判斷過 ,已經走過

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

2、 從此時距離最短的點出發,更新與id相連的點的值,有兩種情況 }}

}}int idex(char

a)void fun(int *p,char fist,char

last)

cout

=0;i--)

cout

<<"

->

"

<<"\n"

;}intmain()

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

}cout

<< "

*****無向網g建立完成!*****\n";

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

d[i]=inf;

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

printf("\n

");}

cout

<<"

請輸入起點和終點:";

cin>>a>>b;

dijkstra(idex(a), d, p, con);

cout

<< a<<"

到最後"

<"

的最短路徑長度為:

"<< d[idex(b)] <<"\n"

;

fun(p,a,b);

return0;

}

這次學習總結了dijkstra演算法模板函式的幾個主要步驟,因為這個函式沒有用到遞迴,只

用了兩個迴圈,因此可以分為從上到下的兩步。

dijkstra演算法模板函式主要有兩步:

一、

確定與初始點v連線的點的路徑 ,檢查所有與初始點連線的點並更新他們的d[i]值。

二、

乙個二重巢狀迴圈,每次for迴圈裡又分兩步:

1、

找出此次迴圈中(d[i]中)距離值最小的,並分別用id,a記錄該點對應的下標與d[i].

2、

以這個點(id)為初始點,更新所有與該點相連通的點(d陣列).

重複第二步。

**以上。**

最短路徑之Dijkstra演算法詳細講解

最短路徑演算法 在日常生活中,我們如果需要常常往返a地區和b地區之間,我們最希望知道的可能是從a地區到b地區間的眾多路徑中,那一條路徑的路途最短。最短路徑問題是圖論研究中的乙個經典演算法問題,旨在尋找圖 由結點和路徑組成的 中兩結點之間的最短路徑。演算法具體的形式包括 確定起點的最短路徑問題 即已知...

最短路徑之Dijkstra演算法詳細講解

最短路徑演算法 在日常生活中,我們如果需要常常往返a地區和b地區之間,我們最希望知道的可能是從a地區到b地區間的眾多路徑中,那一條路徑的路途最短。最短路徑問題是圖論研究中的乙個經典演算法問題,旨在尋找圖 由結點和路徑組成的 中兩結點之間的最短路徑。演算法具體的形式包括 確定起點的最短路徑問題 即已知...

最短路徑之Dijkstra演算法詳細講解

2009 01 12 23 08 48 分類 3s 舉報 字型大小訂閱 最短路徑演算法 在日常生活中,我們如果需要常常往返a地區和b地區之間,我們最希望知道的可能是從a地區到b地區間的眾多路徑中,那一條路徑的路途最短。最短路徑問題是圖論研究中的乙個經典演算法問題,旨在尋找圖 由結點和路徑組成的 中兩...