迪傑斯特拉演算法

2021-09-27 07:06:00 字數 1809 閱讀 2977

/**

*2018.9.28 22:53

*迪傑斯特拉演算法

*求源點到其餘所有點的最短路徑

*核心思想:cost陣列表示源點到該點的距離(權重之和),path表示源點到該點的中間頂點

*set表示該點是否是否已經找到最短路徑

*1.初始化cost陣列(源點到各點的直接距離,路徑存在則path[i] = source)

set每個元素初始化為0

*2.將源點的path設定為-1,表示沒有路徑,並set[source] = 1,表示已在最短路徑中

*3.找出沒有在最短路徑中且到源點到該頂點路徑最短的頂點(該點)

*4.將該點併入最短路徑中set[該點] = 1

*5.從該點出發,從該點到在未併入最短路徑的每個頂點

*6.比較從源點到該點的路徑長度(cost[該點])+

該點到某個未併入最短路徑的頂點的路徑長度(edge[該點][某個未併入頂點])

與 源點到某個未併入最短路徑的頂點的路徑長度(cost[某個未併入頂點])

*7.若前者小於後者,則更新 cost[某個未併入頂點] = cost[該點] + edge[該點][某個未併入頂點]

* 且更新 path[某個未併入頂點] = 該點

**tips:最後的path陣列其實儲存了一棵樹(雙親表示法)

* path中其實是儲存的是頂點i到源點的路徑間的上乙個頂點

*/#include

#define max 100

//表示兩點之間沒有路徑

#define max_weight 1000

typedef

struct matrix matrix;

void

dijkstra

(matrix g,

int cost,

int path,

int source)

;void

printpath

(int path,

int terminus)

;int

main

(void),

,,,,

,,},

7,7}

;int cost[max]

,path[max]

;dijkstra

(g, cost, path,0)

;printpath

(path ,5)

;putchar

('\n');

system

("pause");

return0;

}void

dijkstra

(matrix g,

int cost,

int path,

int source)

//看在鄰接矩陣是怎麼規定某點到自己的距離的

//是max_weight則直接用下這句,若是用0表示,則加path[source] = -1;

set[source]=1

;for

(i =

0; i < g.v_num -1;

++i)

} set[k]=1

;for

(j =

0; j < g.v_num;

++j)}}

}void

printpath

(int path,

int terminus)

while

( top !=-1

)printf

("%d "

, stack[top--])

;}

迪傑斯特拉演算法

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