码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2017-10-26 13:38:52      阅读:99      评论:0      收藏:0      [点我收藏+]

标签:最短路   main   names   log   cst   com   pop   clu   code   

 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求一个点到所有点的最短路

标签:最短路   main   names   log   cst   com   pop   clu   code   

原文地址:http://www.cnblogs.com/eastblue/p/7735929.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!