• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
橘如智
博客园    首页    新随笔    联系   管理    订阅  订阅
dijkstra
 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 }

 

posted on 2018-12-02 16:02  橘如  阅读(177)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3