Dijkstra 演算法實現樣例

2022-03-14 19:17:38 字數 1962 閱讀 5899

樣例輸入:

60 2 5

0 3 30

1 0 2

1 4 8

2 5 7

2 1 15

4 3 4

5 3 10

5 4 18

-1 -1 -1

樣例輸出:

20 0->2->1

5 0->2

22 0->2->5->3

28 0->2->1->4

12 0->2->5

#include #include 

#define inf 1000000 //

無窮大#define maxn 20 //

頂點個數的最大值

int n; //

頂點個數

int edge[maxn][maxn]; //

鄰接矩陣

int s[maxn]; //

dijkstra演算法用到的3個陣列

int dist[maxn]; //

int path[maxn]; //

void dijkstra( int v0 ) //

求頂點v0到其他頂點的最短路徑

s[v0] = 1; dist[v0] = 0; //

頂點v0加入到頂點集合s

for( i=0; i1; i++ ) //

從頂點v確定n-1條最短路徑

}s[u] = 1; //

將頂點u加入到集合s,表示它的最短路徑已求得

for( k=0; k//

修改t集合中頂點的dist和path陣列元素值}}

}int

main( )

for( i=0; i)

}dijkstra(

0 ); //

求頂點0到其他頂點的最短路徑

int shortest[maxn]; //

輸出最短路徑上的各個頂點時存放各個頂點的序號

for( i=1; i)

k++; shortest[k] = 0

;

for( j=k; j>0; j--)

printf(

"%d→

", shortest[j] );

printf(

"%d\n

", shortest[0

] );

}return0;

}

/*

dijkstra o(e * log e)

init: 呼叫init(nv, ne)讀入邊並初始化;

call: dijkstra(n, src); dist[i]為src到i的最短距離

*/int

cost[e], dist[v];

inte, pnt[e], nxt[e], head[v], prev[v], vis[v];

struct

qnode

bool

operator

<(const qnode & r) const

};void dijkstra(int n, const

intsrc)

}while (!que.empty() && vis[que.top().v] == 1

) que.pop();

if (que.empty()) break

; mv =que.top();

que.pop();

vis[pre = mv.v] = 1

; }

}inline

void addedge(int u, int v, int

c) void init(int nv, int

ne)

}

dijkstra演算法實現

include include using namespace std const int maxnum 100 const int maxint 999999 各陣列都從下標1開始 int dist maxnum 表示當前點到源點的最短路徑長度 int prev maxnum 記錄當前點的前乙個結...

Dijkstra演算法的實現

dijkstra演算法的實現 讀入 dijkstratxt 中的部分網路資料 test.txt 弧段起點id,弧段終點id,弧段距離 用dijkstra演算法生成的最佳路徑再寫入 routetxt.txt 檔案中 include include include include using names...

Dijkstra演算法java實現

看到網上的dijkstra演算法寫的都好複雜,我自己就簡單的寫了乙個,例子為書上的例子。public class dijkstra 存放的為頂點所在陣列的id和頂點名稱 mapv new hashmap 不存放源點 v0 v.put 1,v1 v.put 2,v2 v.put 3,v3 v.put ...