spfa求单源最短路
来源:互联网 发布:centos rm 恢复 编辑:程序博客网 时间:2024/06/09 17:58
spfa的策略是松弛:设置一个队列用来保存被优化的节点,优化时每次取出队头节点u,然后对u 的相邻节点进行松弛操作,如果v点进行了松弛操作,并且v不再当前队列中,就将v放入队尾,。这样不断从队列中取出节点来进行松弛操作,直到队列为空。
代码:
#include <iostream>#include <cstdio>#include <cstring>#include <queue>using namespace std;const int maxn = 1005;const int inf = 999999999;struct EDGE{ int to; int next; int w;};EDGE edge[maxn];int num;int head[maxn];bool inque[maxn];int dist[maxn];void init(){ num = 0; memset(head,-1,sizeof(head)); memset(inque,false,sizeof(inque)); for(int i = 0; i < maxn; i++) dist[i] = inf;}void add(int from,int to,int w){ edge[num].to = to; edge[num].w = w; edge[num].next = head[from]; head[from] = num++;}void spfa(int s){ dist[s] = 0; inque[s] = true; queue<int>Q; Q.push(s); while(!Q.empty()){ int u = Q.front(); Q.pop(); for(int i = head[u]; i != -1; i = edge[i].next){ int v = edge[i].to; if(dist[u] + edge[i].w < dist[v]) dist[v] = dist[u] + edge[i].w; if(!inque[v]){ inque[v] = true; Q.push(v); } } inque[u] = false; }}int main(){ int n,m,s,t; while(cin>>n>>m){ init(); while(m--){ int u,v,w; scanf("%d%d%d",&u,&v,&w); add(u,v,w); } cin>>s>>t; spfa(s); cout<<dist[t]<<endl; } return 0;}
0 0
- spfa求单源最短路
- SPFA算法 求单源最短路
- 求单源最短路的SPFA算法
- SPFA求单源最短路(邻接表)
- SPFA最短路
- 最短路之SPFA
- 最潮最短路算法:SPFA
- 图论最短路之spfa
- poj2472最短路spfa
- 最短路SPFA--poj3013
- 最短路 SPFA模板
- 最短路 SPFA
- 最短路spfa
- 最短路SPFA
- 最短路--SPFA算法
- 最短路SPFA算法
- 最短路SPFA
- 最短路SPFA
- bzoj1089-[SCOI2003]严格n元树
- 威佐夫博弈
- 装饰模式
- 项目三-体验复杂度(2)汉诺塔
- User-Agent 汇总
- spfa求单源最短路
- datatables 初始化实例
- 快速排序(重点)
- 去掉listview中item之间的横线以及设置listview的背景色
- c++中的类型萃取
- 会议如何进行网络直播
- tjut 3567
- Linux进程间通信(三)
- Odd Even Linked List