dijkstra演算法 C語言 鄰接表

2021-08-03 05:18:41 字數 1129 閱讀 8282

用來求單源最短路徑

ss和u兩個陣列,ss存放已計算完的頂點,u存放未計算完的頂點

dis欄位標識到此點的距離

步驟1、初始化,第乙個點dis=0,後面的點dis=1000

2、迴圈n次,n為頂點數

2.1 從u中取出乙個dis最小的頂點,放入ss,從u中刪除這個頂點

2.2 設取出的頂點為v,遍歷v的邊,用v的 (dis+邊權) 與 (邊指向的點的dis) 做比較,保留較小值

2.3 回到2

typedef struct side//邊

side,*slink;

typedef struct vertex//頂點

vertex,adjlist[20];

typedef struct graph//圖

graph,*glink;

void creategraph(glink g)

printf("請輸入邊資訊");

int v1,v2,da;

for(i=0;itovertex = v2;

s->next = g->adj[v1].first;

g->adj[v1].first = s;

s->data = da;

}}

snum存放ss的長度,unum存放u的長度

這裡ss其實沒有什麼用,可以省略

void dijkstra(glink g)

int i,j;

int ss[15],u[15],snum=0,unum=g->n;//s存完事的邊,u存未完事的邊

//執行演算法

g->adj[0].dis = 0;

for(i=0;in)

}int v = u[index];

ss[snum++] = v;//加入ss

unum--;

for(j=index;jadj[v].first;

while(s)

s = s->next;}}

}

int main()

return 0;

}

c語言Dijkstra演算法

include dijkstra演算法 解決最短路徑問題,從乙個初始點v0出發,設定lowcost陣列,記錄初始點到每乙個頂點的最短路徑,設定path陣列 記錄初始點到每個點最短路徑所經過的每乙個點,設定visit陣列,記錄已經選入lowcost陣列的點設定為 1 下次經過不再選中。思想 選擇初始點...

Dijkstra演算法(C語言)

dijkstra演算法 1.定義概覽 dijkstra 迪傑斯特拉 演算法是典型的單源最短路徑演算法,用於計算乙個節點到其他所有節點的最短路徑。主要特點是以起始點為中心向外層層擴充套件,直到擴充套件到終點為止。dijkstra 演算法是很有代表性的最短路徑演算法,在很多專業課程中都作為基本內容有詳細...

Dijkstra蒜法 C語言實現(鄰接表)

dijstra,求解單源最短路徑問題,解決乙個頂點到其它所有頂點的最短路徑,但是無法求解權值為負數的情況 負權值可考慮使用spfa 是一種基於bfs 廣度優先 從起點開始,一層層向外拓展,逐步更新資料,直到拓展到終點為止。初始有s,u兩個集合,s記錄已經求出最小值的頂點,u記錄還未求出最小值的頂點,...