Dijkstra算法

邻接矩阵版

 1 #include <bits/stdc++.h>
 2 
 3 using namespace std;
 4 
 5 const int maxn=1010;
 6 const int INF=0x3f3f3f3f;
 7 int n,m,s,G[maxn][maxn];//n为顶点数,m为边数,s为起点
 8 int d[maxn];//到达各点的最短路径长度
 9 bool vis[maxn]={false};
10 
11 void Dijkstra(int s)
12 {
13     fill(d,d+maxn,INF);
14     d[s]=0;
15     for(int i=0;i<n;i++)//n个顶点循环n次
16     {
17         int u=-1,minn=INF;
18         for(int j=0;j<n;j++)
19         {
20             if(!vis[j]&&d[j]<minn)
21             {
22                 u=j;
23                 minn=d[j];
24             }
25         }//若找不到小于INF的数组d则可证明改点于起点不连通
26         if(u==-1) return;
27         vis[u]=true;
28         for(int v=0;v<n;v++)
29         {
30             if(vis[v]==false&&G[u][v]!=INF&&d[u]+G[u][v]<d[v])
31             {
32                 d[v]=d[u]+G[u][v];//优化数组d
33             }
34         }
35     }
36 
37 }
View Code

 

posted @ 2018-04-01 15:42  Somnus、M  阅读(91)  评论(0编辑  收藏  举报