关于最短路算法SPFA
来源:互联网 发布:php curl post header 编辑:程序博客网 时间:2024/06/14 08:51
SPFA算法就是bellman-ford算法的一种实现方式,其中用了队列来优化bellman-ford算法,从而减少了冗余的松弛操作,是一种高效的最短路算法。事实上SPFA算法的核心就是宽度优先搜索,实现方式为队列,主要过程为将起点入队,将和队头相邻且不在队列中的边入队,对和队头点相邻的点做松弛操作,将队头出队,直到队列中没有任何元素,需要注意的就是在图论的题中对重边的处理,另外SPFA算法有两种优化方式SLF和LLL,大家可以自行查阅,下面还是例题HDU2544
Problem Description
在每年的校赛里,所有进入决赛的同学都会获得一件很漂亮的t-shirt。但是每当我们的工作人员把上百件的衣服从商店运回到赛场的时候,却是非常累的!所以现在他们想要寻找最短的从商店到赛场的路线,你可以帮助他们吗?
Input
输入包括多组数据。每组数据第一行是两个整数N、M(N<=100,M<=10000),N表示成都的大街上有几个路口,标号为1的路口是商店所在地,标号为N的路口是赛场所在地,M则表示在成都有几条路。N=M=0表示输入结束。接下来M行,每行包括3个整数A,B,C(1<=A,B<=N,1<=C<=1000),表示在路口A与路口B之间有一条路,我们的工作人员需要C分钟的时间走过这条路。
输入保证至少存在1条商店到赛场的路线。
Output
对于每组输入,输出一行,表示工作人员从商店走到赛场的最短时间
Sample Input
2 1 1 2 3 3 3 1 2 5 2 3 5 3 1 2 0 0
Sample Output
3 2
#include<iostream>#include<queue> #include<cstring>#define N 211#define MAX 10000000using namespace std;int Cmap[1001][1001];//邻接矩阵储存图 queue <int> que;//队列储存 bool v[N];//是否在队列中 int s[N];//记录松弛操作结果的数组 int n,m,x,y,z,tmp,st,ed;void init()//初始化 { for(int i=0;i<N;i++) { s[i]=MAX; v[i]=false; for(int j=0;j<N;j++) { if(i==j) Cmap[i][i]=0; else Cmap[i][j]=MAX; } } while(!que.empty()) { que.pop(); } st=ed=tmp=0;}void spfa(){ st=1; ed=n; s[st]=0; que.push(st);//起点入队 v[st]=true; while(!que.empty())//判断队列非空 { tmp=que.front(); que.pop(); v[tmp]=false; for(int i=1;i<=n;i++)//松弛操作并判断入队 { if(Cmap[tmp][i]<MAX) { if(s[i]>s[tmp]+Cmap[tmp][i]) { s[i]=s[tmp]+Cmap[tmp][i]; if(v[i]==false) { v[i]=true; que.push(i); } } } } }}int main(){ while(cin>>n>>m) { if(n==0&&m==0) break; init(); for(int i=0;i<m;i++) { cin>>x>>y>>z; Cmap[x][y]=Cmap[y][x]=z<Cmap[x][y]?z:Cmap[x][y];//判重 } spfa(); cout<<s[ed]<<endl; } }
0 0
- 关于最短路算法SPFA
- 最短路--SPFA算法
- 最短路SPFA算法
- 最短路: SPFA算法
- spfa算法 最短路
- SPFA最短路算法
- hdu2544 最短路(SPFA算法)
- 最短路算法(SPFA)
- SPFA算法之最短路。
- 最短路(SPFA)算法
- 最短路SPFA 算法详解
- SPFA算法 (最短路)
- 最短路【SPFA】算法模板
- SPFA最短路算法解析
- 最短路之SPFA算法
- 最短路SPFA算法模板
- 浅谈最短路-SPFA算法
- SPFA算法 最短路 蓝桥杯
- 10个习惯助你成为优秀程序员
- 基于ASP.NET实现全球化
- 数据库间区别
- JSON和JSONP
- Android 自定义权限 (<permission> <uses-permission>)
- 关于最短路算法SPFA
- 用ASP编程控制在IIS建立Web站点的程序代码
- 编程算法基础-2.3进制转换
- c 多维数组指针(一站式编程)
- memcached的基本设置
- C++中cout输出字符串问题。
- oracle sid 与 servername 区别
- jquery 扑捉回车键事件
- 利用反射,实现动态调用winform窗体!!