用來求單源最短路徑
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記錄還未求出最小值的頂點,...