bfs和spfa最短路算法的区别,细节

原创 2013年12月01日 21:46:45

SPFA  在形式上和BFS非常类似,不同的是BFS中一个点出了队列就不可能重新进入队列,但是SPFA中
一个点可能在出队列之后再次被放入队列,也就是一个点改进过其它的点之后,过了一段时间可能本
身被改进,于是再次用来改进其它的点,这样反复迭代下去。

判断有无负环:如果某个点进入队列的次数超过V次则存在负环(SPFA无法处理带负环的图)。

 

而需要记住的是,又是不同的题目,也许用spfa(多了 一个vis[u]=0)会超时,也可能用spfa更忧;所以要随时变通!

 

int bfs(int s)
{
	memset(vist,0,sizeof(vist));
	memset(dist,0x3f,sizeof(dist));
	int u,v; 
	queue<int>q;
	vist[s]=1;  
	dist[s]=0;
	q.push(s);
	while(!q.empty())
	{
		u=q.front();
		q.pop();
		for(int i =head[u]; i!=-1 ; i=edge[i].next)
		{
			v=edge[i].v;
			  if(dist[v] > dist[u]+edge[i].c)
			  {
			  	     
  			  	     dist[v] = dist[u]+edge[i].c ;
			  	     if(!vist[v])
			  	     {
			  	        vist[v]=1;
					 q.push(v); 	
				     } 
			  }
		}	
	}
	return 0;
}


 

 

int SPFA(int s)
{
	memset(vist,0,sizeof(vist));
	memset(dist,0x3f,sizeof(dist));
  	int u,v; 
	queue<int>q;
	vist[s]=1;  
	dist[s]=0;
	q.push(s);
	while(!q.empty())
	{
		u=q.front();
		q.pop();
		vist[u]=0;//差别在这
		for(int i =head[u]; i!=-1 ; i=edge[i].next)
		{
			v=edge[i].v;
			  if(dist[v] > dist[u]+edge[i].c)
			  {
			  	     
  			  	     dist[v] = dist[u]+edge[i].c ;
			  	     if(!vist[v])
			  	     {
			  	        vist[v]=1;
					q.push(v); 	
				     } 
			  }
		}	
	}
	return 0;
}


 

 




                    

BFS笔记

首先是一个BFS的模板。BFS通过保证到每一个点的路都是最短的来保证到最后的终点也是最短的。如何实现这种保证,那就是通过队列,比如要到达一个需要走三步才能到达的点E,那么先将一步就能到达的A点与B点入...

bfs之——寻找多个目的地的最短路

题目:hdu4771 题意:寻找带有多个目的地的最短路 解答:因为一共最多有4个目的地。所以将四个目的地排序。然后依次求出该顺序的最短路。选择最短的即可。 注意:1、下标问题!        ...

多源最短路算法

1. 方法: 2. Floyd算法: void Floyd() { for(i = 0; i < N; i++) { for(j = 0; j

SPFA 算法详解( 强大图解,不会都难!)

适用范围:给定的图存在负权边,这时类似Dijkstra等算法便没有了用武之地,而Bellman-Ford算法的复杂度又过高,SPFA算法便派上用场了。 我们约定有向加权图G不存在负权回路,即最短路径一...

最短路算法 :Bellman-ford算法 & Dijkstra算法 & floyd算法 & SPFA算法详解&BFS

1、Bellman-Ford算法 2、Dijkstra算法(代码 以邻接矩阵为例) && Dijkstra + 优先队列的优化(也就是堆优化) 3、floyd-Warshall算法(代...

最短路算法详解(Dijkstra/SPFA/Floyd)

一、Dijkstra Dijkstra单源最短路算法,即计算从起点出发到每个点的最短路。所以Dijkstra常常作为其他算法的预处理。  使用邻接矩阵的时间复杂度为O(n^2),用优先...

[ACM] 最短路算法整理(bellman_ford , SPFA , floyed , dijkstra 思想,步骤及模板)

以杭电2544题目为例 最短路 Problem Description 在每年的校赛里,所有进入决赛的同学都会获得一件很漂亮的t-shirt。但是每当我们的工作人员把上百件的衣服从商店运...

最短路算法spfa hdu 1863

畅通工程续Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Subm...

三个最短路算法Dijkstra's;floyd;SPFA

最短路径问题旨在寻找图中两节点之间的最短路径,常用的算法有以下四种。注意是把图处理成无向还是有向 Dijkstra's (权值非负) 1 Dijkstra's算法解决的是图中单个源点到其它顶点...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:bfs和spfa最短路算法的区别,细节
举报原因:
原因补充:

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