迪傑斯特拉演算法

2021-08-28 11:24:24 字數 1052 閱讀 3626

dijkstra演算法

——單源最短路徑

每次找到離源點最近的乙個頂點,然後以該頂點為中心進行擴充套件,最終得到源點到其餘所有點的最短路徑。 

1.把所有的頂點分為兩部分:已知最短路程的頂點集合p和未知最短路徑的頂點集合q。 最開始,p集合中只有源點乙個頂點,用visit[i]陣列來記錄哪些點在集合p。visit[i]=1表示這個頂點在p集合中,visit[i]=0表示這個頂點在q集合中。

2.設定源點s到自己的最短路徑為0,即dis[s]=0,若存在有源點能直接到達的頂點i,則把dis[i]設為e[s][i],同時把所有其他(源點不能到達的)頂點的最短路徑設為inf。

3.在集合q的所有頂點中選擇乙個離源點s最近的頂點u(dis[u]最小)加入到集合p,並考察所有以點u為起點的邊,對每條邊進行鬆弛操作。例如:存在一條u到v的邊,通過u->v新增到尾部來拓展一條從s到v的路徑,這條路徑的長度是dis[u]+e[u][v]。如果它的值比目前已知的dis[v]的值要小,我們可以用新值來替代當前dis[v]中的值。

4.重複第3步,如果集合q為空,演算法結束,最終dis陣列中的值就是源點到所有頂點的最短路徑。

**實現如下:

#includeusing namespace std;

int e[111][111],dis[111],visit[111];

int n,m;

const int inf=999999;

void init1() }}

void init2()

//初始化visit陣列

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

visit[1]=1;

}void dijkstra()

} }}int main()

init2();

dijkstra();

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

return 0;

}

迪傑斯特拉演算法

if object id t test is not null drop table t test gocreate table dbo t test id int identity 1,1 not null primary key,自增字段,無意義 header varchar 500 第一點的名...

迪傑斯特拉演算法

dijkstra 迪傑斯特拉 演算法是典型的最短路徑路由演算法,用於計算乙個節點到其他所有節點的最短路徑。主要特點是以起始點為中心向外層層擴充套件,直到擴充套件到終點為止。dijkstra演算法 能得出最短路徑的最優解,但由於它遍歷計算的節點很多,所以效率低。dijkstra演算法是很有代表性的最短...

迪傑斯特拉演算法

迪傑斯特拉演算法用來計算圖中某一點到其他點的最短距離,這個圖可以是加權,也可以是無權的,距離指的是從一點到其它點所經過的邊的權重和 假設現在有乙個加權無向圖,我們要求節點1到其他點的最短距離 初始化圖arr 用乙個鄰接矩陣來表示一張圖,矩陣元素 初始化一維向量d,這個向量儲存的是其他點的最短距離,初...