經典演算法 迪傑斯特拉(Dijkstra)最短路徑

2021-07-22 03:58:48 字數 1153 閱讀 5273

迪傑斯特拉演算法是由荷蘭計算機科學家狄克斯特拉於1959 年提出的,因此又叫狄克斯特拉演算法。是從乙個頂點到其餘各頂點的最短路徑演算法,解決的是有向圖中最短路徑問題。迪傑斯特拉演算法主要特點是以起始點為中心向外層層擴充套件,直到擴充套件到終點為止。

其基本思想是,設定頂點集合s並不斷地作貪心選擇來擴充這個集合。乙個頂點屬於集合s當且僅當從源到該頂點的最短路徑長度已知。

初始時,s中僅含有源。設u是g的某乙個頂點,把從源到u且中間只經過s中頂點的路稱為從源到u的特殊路徑,並用陣列dist記錄當前每個頂點所對應的最短特殊路徑長度。dijkstra演算法每次從v-s中取出具有最短特殊路長度的頂點u,將u新增到s中,同時更新陣列dist(算導中稱作relax)。一旦s包含了所有v中頂點,dist就記錄了從源到所有其它頂點之間的最短路徑長度。

dijkstra(g,w,s)

1. initializ_single_source(g,s) //dist = inf, dist[s] = 0

2. s = 空集

3. q=g.v

4. while q != 空集

u = extract-min(q)

s = su

for each vertex v屬於g.adj[u]

relax(u,v,w)

#include

#include

#include

//#include

using

namespace

std;

struct edge

};class graph

}//依次讀入頂點資訊

void readvertex()

//依次讀入邊資訊

void readedge()

}void dijkstra(int v0);

// v0是源點

void printpath(int v, int v0)

cout

}int n=n-1;

while(n--)

}isvisited[u] = true;

//relax 更新dist

for(int i=0; iif(dist[u] + tmp.w < dist[tmp.noend])}}

}int main()

迪傑斯特拉演算法

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,這個向量儲存的是其他點的最短距離,初...