1 //usage language C++ 领接表 2 #include <bits/stdc++.h> 3 using namespace std; 4 #define INF 0x3f3f3f3f 5 int dist[MAX_VERTEX_NUM]; 6 int vis[MAX_VERTEX_NUM]; 7 8 void MyDijkstra(AdjList G, int v0){ 9 vector<vector<int>> path(MAX_VERTEX_NUM); 10 memset(vis, 0, sizeof(vis)); 11 memset(dist, 0x3f, sizeof(dist)); 12 ArcNode *p; 13 p = G.vertex[v0].firstarc; 14 while(p != NULL){ 15 dist[p->adjvex] = p->weight; 16 /* 17 path[p->adjvex].push_back(v0); 18 path[p->adjvex].push_back(p->adjvex); 19 */ 20 p = p->nextarc; 21 } 22 vis[v0] = 1; 23 int k; 24 for(int t = 1; t < G.vexnum; t++){ 25 int min = INF; 26 for(int i = 0; i < G.vexnum; i++){ 27 if(!vis[i] && dist[i] < min){ 28 k = i; 29 min = dist[i]; 30 } 31 } 32 //记录k是已经最短的了 33 vis[k] = 1; 34 //以k为基点更新最短路 35 p = G.vertex[k]->firstarc; 36 while(p != NULL){ 37 if(!vis[p->adjvex] && p->weight + dist[k] < dist[p->adjvex]){ 38 dist[p->adjvex] = dist[k] + p->weight; 39 /* 40 path[p->adjvex].assign(path[k].begin(), path.end()); 41 path[p->adjvex].push_back(G.vertex[i]); 42 */ 43 } 44 45 p = p->nextarc; 46 } 47 } 48 49 }