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;
}


 

 





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

相关文章推荐

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

最短路算法详解:Dijkstra、SPFA、Floyd

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

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

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

常用的图论最短路算法详解(dijkstra/SPFA/floyd)

最潮最短路算法:SPFA

首先理解单源最短路一滴概念(以下概念不作证明,证明自行baidu):   V:点集   E:边集   s:源点   u:当前起始定点   v:当前目标顶点   u->v:表示顶...

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

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

最短路算法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算法解决的是图中单个源点到其它顶点...

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

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

单源最短路径算法 Bellman-Ford && SPFA 及 最短路算法统一归纳

为避免各种求最短路的方法混淆,开始之前先做个归纳。   ① BFS - 无权图 (有向或无向,有环或无环)- 对于树的bfs,无需判重,因为根本不会重复。对于图的bfs,要有vis[]进行...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

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