数据结构——最短路径算法之floyd算法

本文介绍了Floyd算法,用于解决图中任意两个节点之间的最短路径问题。通过初始化邻接矩阵,设置节点间的初始距离,然后通过不断寻找中转节点更新最短路径,最终得到所有节点对的最短路径。算法思想基于三角不等式,通过迭代找到最短路径。
摘要由CSDN通过智能技术生成

数据结构——最短路径算法之floyd算法

(一) Flody算法

【前言】:前面的Dijkstra算法用来解决单源最短路径的问题,即:从指定点到图上其他各点的最短路径。那么,如果我们要求图中任意两个结点之间的最短路径,如何用算法来实现呢?如果用Dijkstra来实现,就需要每次改变源点,再使用多个dis数组来记录,这样,问题就会变得很复杂。那么,有没有一种简单的算法来求图中任意两个结点之间的最短路径呢?当然有!那就是 Flody算法。

利用类似三角形定理:三角形的任意两边之和大于或等于第三边;

1.1 初始化

用邻接矩阵来存图,先进行初始化,自己到自己的距离初始化为0,到另外的顶点的距离初始化为无穷大。并将标记数组都置为0,表示所有顶点都未访问;

void init(){
   
	for(int i=0;i<nodeNum;i++){
   
		for(int j=0;j<nodeNum;j++){
   
			if(i==j)
				matrix[i][j]=0;
			else
				matrix[i][j]=INF; 
		}
	}
	
}

【算法思想】:求A到B的最短路径,Flody算法的核心思想就是找到一个中转站C,使得从A到C再到B的距离比从A直接到B的距离短;
核心算法就是在N个结点中找到每次合适的一个中转站k:

floyd算法思想:

void flody(){
   
	for(int i=0;i<nodeNum;i++){
   //在n个结点中依次找中转站;
		for(int j=i+1;j<nodeNum;j++){
   
			for(int k=i;k<j;k++){
   
			//如果直接从i到j的距离大于从i到k再到j的距离,
			//即找到一个合适的中转站,就更新地图;
				if(matrix[i][k]!=INF&&matrix[k][</
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值