邻接表+bfs求一个点到所有点的最短路
Posted 东流vip
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了邻接表+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
以上是关于邻接表+bfs求一个点到所有点的最短路的主要内容,如果未能解决你的问题,请参考以下文章