标签:图
1. #include <cstdio> #include <iostream> #include <algorithm> #include <queue> #include <stack> #include <climits> #include <cstring> #include <cmath> #include <map> #include <set> #define INF 100000000 using namespace std; int n,v,m; int d[1000]; int vis[1000]; int G[1000][1000]; int dijkstra(int s){ fill(d,d+n,INF); memset(vis,0,sizeof(vis)); d[s] = 0; for(int i = 0;i < n - 1;i++){ int tm = INF; int q ; //在已经寻找到最短路径的点找到最小的那个 for(int j = 0;j < n;j++){ if(!vis[j] && d[j] < tm){ tm = d[j]; q = j; } } //代表这个点已经找到了最短路径 vis[q] = 1; for(int j = 0;j < n;j++){ if(G[q][j]){ d[j] = min(d[j],d[q] + G[q][j]); } } } for(int i = 0;i < n;i++){ printf("%d\n",d[i]); } } int main(){ while(cin >> n >> m){ for(int i = 0;i < m;i++){ int x,y,w; cin >> x >> y >> w; G[x][y] = w; G[y][x] = w; } int s; cin >> s; dijkstra(s); } return 0; }
2.
#include <cstdio> #include <iostream> #include <algorithm> #include <queue> #include <stack> #include <climits> #include <cstring> #include <cmath> #include <map> #include <set> #define INF 100000000 using namespace std; int n,v,m; int d[1000]; int vis[1000]; int G[1000][1000]; typedef pair<int,int> pa; int dijkstra(int s){ fill(d,d+n,INF); memset(vis,0,sizeof(vis)); priority_queue< pa,vector<pa>,greater<pa> > que; que.push(pa(0,s)); d[s] = 0; for(int i = 0;i < n - 1;i++){ int q = que.top().second; que.pop(); for(int j = 0;j < n;j++){ if(G[q][j]){ d[j] = min(d[j],d[q] + G[q][j]); que.push(pa(d[j],j)); } } } for(int i = 0;i < n;i++){ printf("%d\n",d[i]); } } int main(){ while(cin >> n >> m){ for(int i = 0;i < m;i++){ int x,y,w; cin >> x >> y >> w; G[x][y] = w; G[y][x] = w; } int s; cin >> s; dijkstra(s); } return 0; }
标签:图
原文地址:http://blog.csdn.net/qq_24667639/article/details/45273887