1. 程式人生 > >鄰接表+bfs求一個點到所有點的最短路

鄰接表+bfs求一個點到所有點的最短路

ios span return namespace mes scanf www bsp tor

 1 #include <iostream>
 2 #include <cstdio>
 3 #include <cstring>
 4 #include <algorithm>
 5 #include <cmath>
 6 #include <queue>
 7 #include <string>
 8 #include <map>
 9 using namespace std;
10 typedef long long ll;
11 const int maxn=1000000;
12
struct node 13 { 14 int to,dis; 15 node(int a,int b) 16 { 17 to=a; 18 dis=b; 19 } 20 bool operator < (const node &A) const 21 { 22 if(dis==A.dis) 23 return to<A.to; 24 else 25 return dis>A.dis;
26 } 27 }; 28 29 vector<node>from[110]; 30 int n,m; 31 int vis[110]={0}; 32 int main() 33 { 34 scanf("%d%d",&n,&m); 35 for(int i=0;i<m;i++) 36 { 37 int a,b,d; 38 scanf("%d%d%d",&a,&b,&d); 39 from[a].push_back(node(b,d));
40 from[b].push_back(node(a,d)); 41 } 42 int dn[110]; 43 for(int i=1;i<n;i++) 44 dn[i]=maxn; 45 dn[n]=0; 46 queue<int>mq; 47 mq.push(n); 48 while(!mq.empty()) 49 { 50 int now=mq.front(); 51 mq.pop(); 52 vis[now]=1; 53 for(int i=0;i<from[now].size();i++) 54 { 55 int x=from[now][i].to; 56 if(!vis[x]) 57 { 58 dn[x]=min(dn[x],dn[now]+from[now][i].dis); 59 mq.push(x); 60 } 61 } 62 } 63 for(int i=1;i<=n;i++) 64 printf("%d %d\n",i,dn[i]); 65 }

http://www.cnblogs.com/by-1075324834/p/4512793.html

鄰接表+bfs求一個點到所有點的最短路