邻接表+bfs求一个点到所有点的最短路

 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

posted @ 2017-10-26 11:29  东流vip  阅读(437)  评论(0编辑  收藏  举报