Bellman-Ford的队列优化(求某点到所有点的最短距离)

原创 2016年08月29日 21:06:10

思路:

将源点入队,从源点开始邻点便利,判断所有邻点中是否需要更新,将需要更新的更新完后判断此点是否在队列内,若不在,将此点入队,重复此过程。

#include<cstdio>
using namespace std;
int u[8],v[8],w[8];
int first[6],next[8];
int dis[6],book[6];
int que[101],head=1,tail=1;
const int inf=999999999;
int main(){
	int i,j,k,m,n;
	scanf("%d%d",&n,&m);
	for(i=1;i<=n;i++){
		dis[i]=inf;
	}
	dis[1]=0;//默认源点是1
	for(i=1;i<=n;i++)first[i]=-1;
	for(i=1;i<=m;i++){
		scanf("%d%d%d",&u[i],&v[i],&w[i]);
		next[i]=first[u[i]];
		first[u[i]]=i;
		//有点像链式前向星 不知道是不是 
	}
	que[tail]=1;//入队 
	tail++;
	book[1]=1;//将点1标为已经入队 
	while(head<tail){
		k=first[que[head]];
		while(k!=-1){//存在这个点 
			if(dis[v[k]]>dis[u[k]]+w[k]){
				dis[v[k]]=dis[u[k]]+w[k];//注意不管在不在队列内只要相邻就要判断是否要更新 
				if(book[v[k]]==0){//更新了并且此点不在队列内 
					que[tail]=v[k];//入队 
					tail++;
					book[v[k]]=1;
				}
			}
			k=next[k];//找下一个相邻点 
		}
		book[que[head]]=0;//出队 
		head++;
	}
	for(i=1;i<=n;i++){
		printf("%d ",dis[i]);
	}
	return 0;
}


版权声明:本文为博主原创文章,未经博主允许不得转载。

最短路径算法--Dijkstra算法,Bellmanford算法,Floyd算法,Johnson算法

大数据技术虫 最短路径算法 在交通地图上,两地点之间的路径通常标有长度,我们可以用加权有向来描述地图上的交通网。加权有向图中每条路径都有一个路径权值...
  • u011089523
  • u011089523
  • 2015年12月07日 10:04
  • 6126

最短路径(四)—Bellman-Ford的队列优化(邻接表)

上一节我们写了Bellman-Ford算法解决负权边的问题: 邻接表存储图: n个顶点,m条边。 数组实现邻接表。对每一条边进行1-m编号。用u,v,w三个数组来记录每条边的信息,即u[...
  • wtyvhreal
  • wtyvhreal
  • 2015年02月03日 18:20
  • 2244

最短路径(三)—Bellman-Ford算法(解决负权边)

前两节我们写了Floyd-Warshall算法http://blog.csdn.net/wtyvhreal/article/details/43315705和 Dijkstra算法http://bl...
  • wtyvhreal
  • wtyvhreal
  • 2015年02月03日 15:45
  • 3922

Bellman-Ford——解决负权边(求某点到所有点的最短距离)

Bellman-Ford与dijkstra一样 都是求某点到所有点的最短距离 先说一下Bellman-Ford的思路:将m条变全部枚举(假设第i条边连接的点是u[i].v[i])判断v[i]到...
  • qq_35653247
  • qq_35653247
  • 2016年08月29日 13:20
  • 584

Bellman-Ford算法和队列优化(SPFA)——求单源最短路径

来源自我的博客 http://www.yingzinanfei.com/2017/04/07/bellman-fordsuanfaheduilieyouhuaspfaqiudanyuanzuidu...
  • yingzinanfei
  • yingzinanfei
  • 2017年04月07日 09:29
  • 248

单点最短路径算法 bellman-ford模板和队列优化后的spfa算法模板

bellman-ford算法 spfa算法模板
  • cai13160674275
  • cai13160674275
  • 2016年03月07日 12:35
  • 317

Bellman_Ford+普通队列(求不含负环的最短路)模板--持续更新中。。。

#include #include #include #include #include using namespace std; const int INF = 1e9; const int max...
  • czkct
  • czkct
  • 2016年03月05日 12:06
  • 177

usaco Sweet Butter(迪杰斯特拉(优先队列优化),bellman_ford算法模板)

这题开始用没有优化的迪杰斯特拉喜闻乐见的超时了,然后我用bellmanford算法按理说时间复杂度更大但是书上说往往只要很短的时间就可以求出最短路。 所以我用了这个算法但是我对这个算法还是不熟套了模板...
  • silence401
  • silence401
  • 2016年12月02日 17:49
  • 763

hdu(2544)——最短路(邻接表+bellman-ford使用队列优化)

又一次做了最短路。。只不过这回使用邻接表写的。。 一开始wa了好久。。 无向图建立邻接表和有向图的区别就是就是要把两边都加进去就好啦。 #include #include #include #in...
  • ACMer_hades
  • ACMer_hades
  • 2016年02月12日 20:41
  • 380

总结一下最短路径的贝尔曼-福特算法(Bellman-Ford)及用队列优化(spfa)

关于贝尔曼福特算法: 百度百科:贝尔曼-福特算法 ---------------------------------------------------------------------------...
  • riba2534
  • riba2534
  • 2017年01月16日 17:45
  • 657
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Bellman-Ford的队列优化(求某点到所有点的最短距离)
举报原因:
原因补充:

(最多只允许输入30个字)