Floyd算法--多源最短路径

本文介绍了一种常用的求解图中两点间最短路径的算法——Floyd算法,并通过实例详细解释了其工作原理及实现过程。
部署运行你感兴趣的模型镜像

在一个给定的图中求两个顶点的最短路径的算法一直是比较常用和比较重要的算法。主要的求最短路径的算法有Floyd算法、Dijkstra算法和Bellman-Ford算法等等,本篇我们先来看一下Floyd算法:

首先我们知道,要求一个图中两个顶点中的最短路径,除了计算出这两个顶点的直接路径,还可以借助其他的顶点作为“跳板”,
来看看能不能使得这两点的路径变短,来看一个例子:

这里写图片描述

假设这是一个给定的无向图图,图中共有4个顶点(A、B、C、D),
图中的边共有:A-->B(10)、A-->C(2)、C-->B(6)、C-->D(1)、D-->B(2)五条边(严格来说有10条边,因为是无向图),
顶点C和顶点B相连:A-->C-->B的距离一共是8,明显比顶点A直接到顶点B更短。
再观察一下,我们还可以发现顶点C和顶点D直接相连,D顶点和顶点B直接相连:A-->C-->D-->B的距离一共是5,又是一条更短的路径!
之后我们找不到顶点A到顶点B还有比距离5更短的路径了,那么,在这个图中顶点A到顶点B的最短路径就是5

在上面的那个简单的例子中,求顶点A到顶点B的最短路径,我们正是利用了其他的顶点作为“跳板”,来寻找是否有更短的路径,Floyd算法的核心思想也正是这个:借助图的其它顶点来求目标顶点之间的最短路径
对于上面的例子,假设顶点A为1号顶点,顶点B为2号顶点,顶点的总数为n,e[n][n]为图的邻接矩阵。那么我们可以用代码来描述刚刚的过程:

for(int i = 1; i <= n; i++)
{
    if(e[1][2] > e[1][i] + e[i]

您可能感兴趣的与本文相关的镜像

Langchain-Chatchat

Langchain-Chatchat

AI应用
Langchain

Langchain-Chatchat 是一个基于 ChatGLM 等大语言模型和 Langchain 应用框架实现的开源项目,旨在构建一个可以离线部署的本地知识库问答系统。它通过检索增强生成 (RAG) 的方法,让用户能够以自然语言与本地文件、数据库或搜索引擎进行交互,并支持多种大模型和向量数据库的集成,以及提供 WebUI 和 API 服务

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值