全源最短路径算法-Floyd

本文介绍了全源最短路径问题,并探讨了使用Floyd算法来解决这一问题的思路。相较于Dijkstra和Bellman-Ford,Floyd算法通过三层循环实现O(n^3)的时间复杂度。文章详细解释了算法的基本思想,并指出循环嵌套顺序的重要性,同时提供了一段示例代码以展示算法的正确应用。
摘要由CSDN通过智能技术生成

一、思路

    求全源最短路径可以采用单源最短路径算法实现,如采用贪心算法的Dijkstra,时间开销为|V|*O(E+VlgV),动态规划的Bellman-Ford, |V|*O(V pow 2 *E),还有Bellman的优化算法SPFA。但是呢,这样无疑会在时间开销上花费昂贵。

   假设我们采用Bellman-Ford算法,

for (int i = 1; i < numOfVertex; i ++)      //这里循环从1开始是因为开始节点已经存放在S中了,还有numOfVertex-1个节点要处理       
{      
	for(int start=0;start<numOfVertex;start++)  
	{  
		for (int j =0; j < numOfVertex; j ++)    
		{  
			if (j!= startVertex  && map[start][j] < INT_MAX)  //在Q中,有距离的为c->d,c->e, c->b   
			{   
				int currentdist = distance[ start] + map[ start ][ j ];      
				if (currentdist < distance[ j ])  //distance[j = ]为开始到j的距离    
				{      
					distance[ j ] = currentdist;      
					prevVertex[ j ] = start;      
				}      
			}      
		}   
	}  
}  

 看看矩阵的乘法:

  1.     for(i=0;i<this->m;i++)    
  2.         for(j=0;j<m2.n;j++)    
  3.         {    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值