dijkstra算法 模板

算法理解见: https://www.bilibili.com/video/av18586085/?p=83

 

模板:

 

 1 #define INF 1000000000
 2 
 3 int N;
 4 int dist[101],g[101][101];
 5 int vis[101];
 6 int path[101];    // path[i]表示在最短路径中,i的上一个点
 7 
 8 void init()  // 初始化
 9 {
10     for(int i = 1; i <= N; ++i)  11     {
12         for(int j = 1; j <= N; ++j)        
13         {    
14             if(i == j)
15                 g[i][j] = 0;
16             else    
17                 g[i][j] = INF;
18         }
19     }
20 }
21 
22 void dijkstra(int start)
23 {
24     for(int i=1;i<=N;i++)
25     {
26         dist[i]=INF;
27         vis[i] = 0;
28 //      path[i] = -1;    
29     }    
30     dist[start] = 0;
31     
32     while(1)
33     {
34         int mark=-1,mindis=INF;
35         for(int i=1;i<=N;i++)
36         {
37             if(!vis[i]&&dist[i]<mindis)
38             {
39                 mindis=dist[i];
40                 mark=i;
41             }
42         }
43         if(mark == -1)    // 找不到未收录的节点,则说明算法结束,退出 
44             break;
45         vis[mark]=1;
46 
47         for(int i=1;i<=N;i++)
48         {
49             if(!vis[i])
50             {
51                 dist[i]=min(dist[i],dist[mark]+g[mark][i]);
52 //              path[i] = mark;   // 记录路径
53             }
54         }
55     }
56 }

 

转载于:https://www.cnblogs.com/FengZeng666/p/11244974.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值