新闻中心
C++如何实现Floyd-Warshall算法_C++求解所有顶点对之间最短路径的动态规划算法

弗洛伊德-沃舍尔(Floyd-Warshall)算法是一种经典的动态规划算法,用于求解有向或无向图中所有顶点对之间的最短路径。它适用于带权图,支持负权边,但不支持包含负权环的图。C++实现该算法简单高效,适合稠密图。
算法基本思想
Floyd-Warshall 的核心是动态规划:逐步尝试通过中间节点优化任意两点间的距离。设 dist[i][j] 表示从顶点 i 到 j 的最短距离。初始时,dist[i][j] 为图的邻接矩阵值。然后枚举每一个可能的中间点 k,检查是否可以通过 k 缩短 i 到 j 的路径:
状态转移方程: dist[i][j] = min(dist[i][j], dist[i][k] + dist[k][j])
C++ 实现代码
以下是一个完整的 C++ 示例,演示如何使用 Floyd-Warshall 算法求解所有顶点对之间的最短路径:
CA.LA
第一款时尚产品在线设计平台,服装设计系统
94
查看详情
#include iostream>#include
#include
using namespace std;
const int INF = INT\_MAX / 2; // 防止加法溢出
void floydWarshall(vector
int n = dist.size();
// 动态规划:枚举中间点 k
for (int k = 0; k for (int i = 0; i for (int j = 0; j if (dist[i][k] != INF && dist[k][j] != INF) {
dist[i][j] = min(dist[i][j], dist[i][k] + dist[k][j]);
}
}
}
}
// 输出结果
cout for (int i = 0; i for (int j = 0; j if (dist[i][j] == INF)
cout else
cout }
cout }
}
int main() {
int n = 4;
vector
{0, 3, INF, 7},
{8, 0, 2, INF},
{5, INF, 0, 1},
{2, INF, INF, 0}
};
floydWarshall(graph);
return 0;
}
关键细节说明
• 使用 INT_MAX / 2 而不是 INT_MAX 是为了避免在加法中发生整数溢出。
• 图以邻接矩阵形式表示,INF 表示两点间无直接边。
• 三重循环中,k 必须放在最外层,确保每次只引入一个新中间节点,符合动态规划顺序。
• 若需记录具体路径,可额外维护一个 parent[i][j] 数组,在更新 dist 时同步记录前驱节点。
时间与空间复杂度
• 时间复杂度:O(n³),三重循环。
• 空间复杂度:O(n²),存储距离矩阵。
适合顶点数不多(如 n ≤ 200)的场景,尤其适用于稠密图。
基本上就这些。Floyd-Warshall 实现简洁,理解其状态转移逻辑是关键。对于稀疏图,可以考虑 Johnson 算法替代。
以上就是C++如何实现Floyd-Warshall算法_C++求解所有顶点对之间最短路径的动态规划算法的详细内容,更多请关注其它相关文章!
# 弗洛伊德
# 营销号如何带货推广
# SEO教程编发发带推荐
# 关于SEO的优点
# 个人优化推广网站
# 青岛定制网站建设的释义
# 新疆网站建设大概收费
# seo博客福州
# 永宁网站建设推广
# 影视推广投稿网站
# 网络营销推广合同案例
# 多线程
# c++
# 解决方法
# 怎么做
# 重写
# 适用于
# 如何实现
# 有什么
# 点对
# 最短
# stream
# ios
# ai
相关栏目:
【
科技资讯46185 】
【
网络学院92790 】
相关推荐:
PDO预处理语句中冒号的正确处理:区分SQL函数格式与命名占位符
b站赚钱渠道_b站收益来源
Golang如何安装Swagger工具_GoSwagger文档生成环境
J*aScript 字符串标签转换:使用正则表达式高效替换
必由学官网首页入口 必由学教师网页版登录指南
淘宝网网页版登录入口 淘宝官方网页版快捷登录
J*aScript实现单选按钮与关联输入框的联动禁用教程
C++如何生成随机数_C++ random库使用方法与范围设置
AO3最新可访问网址 Archive of Our Own官方在线入口
win11如何卸载Windows更新补丁 Win11解决更新导致系统不稳定的问题【修复】
HTML元素状态管理:根据DIV内容动态启用/禁用按钮
sublime如何配置Go语言开发环境_sublime搭建Golang编译运行系统
如何使用CaptainHook和Composer管理Git钩子_在提交前自动运行代码检查的Composer配置
谷歌浏览器浏览体验优化_谷歌浏览器新版直连永久可用提示
优化HTML表单样式:解决输入框焦点跳动与元素间距问题
如何使用Rector自动化升级旧代码_通过Composer安装和配置Rector进行代码重构
CKEditor 5 自定义构建在React应用中渲染失败的调试与解决
NetBeans Ant项目:自动化将资源文件复制到dist目录的教程
邮政快递包裹最新位置 邮政快递实时追踪入口
12306选座系统怎么选连座_12306选座多人连坐操作方法
iwriter统一登录平台 iwrite账号密码登录页面
大麦的“候补”是什么意思 大麦候补购票规则【详解】
Lar*el递归关系中排除子孙节点的策略
Golang如何优雅处理error_Golang error处理最佳实践总结
composer的"require-dev"部分是用来做什么的?
C++20的source_location是什么_C++在编译期获取源码位置信息用于日志和断言
内存疯狂猛猛涨价:主板销量直接腰斩!
铁路12306官网网页端快速入口 铁路12306官方首页登录教程
TikTok国际版网页端快速入口 TikTok全球版短视频浏览教程
包子漫画官方网站阅读入口-包子漫画在线漫画官网直达链接
天眼查企业查询官网入口 天眼查官方网页版查询
12306选座怎么选到特殊座位_12306特殊座位选择注意事项
漫蛙2网页版漫画入口 漫蛙漫画在线官方登录
c++中为什么推荐使用using替代typedef_c++现代化类型别名
荣耀Play7T运行卡顿解决_荣耀Play7T性能优化
抖音极速版最新版本 抖音极速版官方下载地址
抖音网页版平台入口 抖音网页版官网在线访问教程
Safari浏览器输入栏卡顿如何解决 Safari搜索建议与缓存清理
Golang如何实现Web文件静态资源服务器_Golang静态资源服务器开发与实践
葱吃多了会怎样 葱吃多了会伤胃吗
Excel如何用迷你图显趋势_Excel用迷你图显趋势【趋势小图】
J*a递归快速排序中静态变量导致数据累积问题的解决方案
格力空气能E5故障代码是什么情况_格力空气能E5代码解析与应对措施
Tabulator表格日期时间排序问题及自定义解决方案
iCloud登录入口网页版 苹果iCloud官网登录
C++ string find函数返回值npos详解_C++字符串查找失败的判断条件
J*a应用程序首次运行自动创建文件与目录的最佳实践
Golang如何使用bytes.Split分割字节切片_Golang bytes切片分割方法
Log4j Console Appender性能瓶颈与高并发优化策略
必由学官网快捷入口 必由学网页版在线学习平台


2025-11-21
浏览次数:次
返回列表