单源最短路(bellmanford&spfa)
来源:互联网 发布:全聚合电视直播软件 编辑:程序博客网 时间:2024/05/22 02:17
这个题是热浪http://codevs.cn/problem/1557/
其实吧,感觉最短路很复杂。其实就是很复杂。
如果你见过bellmanford,你马上就能理解spfa
bellmanford是严格n方,加上队列优化最好可以nlogn,但很容易卡成n方。
这个东西很玄学。
所以让你(见过)一下
#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>using namespace std;const int INF=1e9+7;int u[200100],v[200100],w[200100],d[200100];int n,m,st,en,temp,a,b,c,ans;void Bellman_ford(){ d[st]=0; for(int i=1;i<=n-1;i++) for(int j=1;j<=temp;j++) if(d[u[j]]<INF) { d[v[j]]=min(d[v[j]],d[u[j]]+w[j]); } ans=d[en];}int main(){ scanf("%d %d %d %d",&n,&m,&st,&en); for(int i=1;i<=n;i++) d[i]=INF; for(int i=1;i<=m;i++) { scanf("%d %d %d",&a,&b,&c); u[++temp]=a;//这个就是邻接链表实现 v[temp]=b; w[temp]=c; u[++temp]=b; v[temp]=a; w[temp]=c; } Bellman_ford(); printf("%d",ans); return 0;}
这个就是spfa
#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>#include<queue>using namespace std;queue<int> q1;//队列优化const int INF=1e9;int temp,n,m,st,en,a,b,c,ans;bool book[200100];int fist[200100],nxt[200100],dis[200100];struct ll{ int u,v,w;}line[200100];void build(int x,int y,int z)//静态建表{ line[++temp].u=x; line[temp].v=y; line[temp].w=z; nxt[temp]=fist[x]; fist[x]=temp;}void SPFA(int a,int b){ for(int i=1;i<=n;i++) dis[i]=INF;//预处理 dis[a]=0;//a到a的距离最短为0 q1.push(st);//起点入队 book[st]=1;//起点已经入队 while(!q1.empty())//根据最短路,队列空时证明已经无法松弛操作,此时已有解 { int k=q1.front();//由队首为节点扩展出的边 q1.pop();//用完就弹出去 book[k]=0;//用来更新其他节点 for(int i=fist[k];i!=-1;i=nxt[i]) { int t=line[i].v;//当前边的终点 if(dis[t]>dis[k]+line[i].w)//如果到达这个点的距离可以被更新,松弛操作。 { dis[t]=dis[k]+line[i].w; if(!book[t])//如果已经入队,不再进行一遍操作。否则队列不会空。这正是队列优化的地方。 { book[t]=1; q1.push(t); } } } } ans=dis[b];}int main(){ memset(fist,-1,sizeof(fist)); scanf("%d %d %d %d",&n,&m,&st,&en); for(int i=1;i<=m;i++) { scanf("%d %d %d",&a,&b,&c); build(a,b,c); build(b,a,c); } SPFA(st,en); printf("%d",ans); return 0;}
阅读全文
0 0
- 单源最短路(bellmanford&spfa)
- 单源最短路与bellmanford
- spfa 算法 (单源最短路)
- 单源最短路SPFA(模板)
- 单源最短路(SPFA算法)
- 单源最短路(spfa),删边求和
- 单源最短路-SPFA(poj2387)
- poj 1062(spfa 单源最短路)
- 单源最短路----Spfa模板 (SLF优化)
- 单源最短路------SPFA
- SPFA单源最短路详解
- 单源最短路-SPFA算法
- Bellmanford 最短路(1)
- (Dijstra + 优先队列,Floyd,BellmanFord,SPFA)HDU-1874
- 最短路(SPFA)
- 最短路 (Spfa)
- spfa ,Dijkstral,bellmanFord求最短路径
- poj3259 Wormholes BellmanFord或SPFA
- 数据结构小结
- Android——BottomTabBar实现底部导航栏
- Java模块 -- WatchService监听服务
- 自定义View之Paint
- Android Studio获取开发版SHA1值和发布版SHA1值的史上最详细方法
- 单源最短路(bellmanford&spfa)
- HDOJ 1266 Reverse Number
- multiple definition of XXX
- POJ 1789
- 2017.11.5 LeetCode
- 自定义View之Paint
- 容易遗忘的东西(持续添加中)
- Ajax学习笔记
- 面向对象和基于对象的区别