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 }