0

0

c++中如何求图的最短路径_c++图最短路径计算方法

尼克

尼克

发布时间:2025-10-11 18:14:01

|

394人浏览过

|

来源于php中文网

原创

Dijkstra算法用于单源最短路径,适合非负权边的稀疏图,时间复杂度O((V+E)logV);Floyd-Warshall算法求多源最短路径,适用于小规模图,可处理负权边但不能有负环,时间复杂度O(V³)。

c++中如何求图的最短路径_c++图最短路径计算方法

在C++中求图的最短路径,常用的方法有Dijkstra算法和Floyd-Warshall算法,分别适用于不同场景。下面介绍这两种方法的基本原理和实现方式。

Dijkstra算法:单源最短路径

用于计算一个起点到图中其他所有顶点的最短路径,适用于非负权边的图。

核心思想是贪心策略,每次选择距离起点最近且未访问的节点进行扩展。

- 使用优先队列(堆)优化,时间复杂度为 O((V + E) log V) - 适合稀疏图

示例代码:

立即学习C++免费学习笔记(深入)”;

#include 
using namespace std;

const int INF = 0x3f3f3f3f; const int MAXN = 1005;

vector> graph[MAXN]; // 邻接表:终点,权重 int dist[MAXN]; bool visited[MAXN];

void dijkstra(int start, int n) { fill(dist, dist + n + 1, INF); dist[start] = 0; priority_queue, vector>, greater>> pq; pq.push({0, start});

while (!pq.empty()) {
    int u = pq.top().second;
    pq.pop();
    if (visited[u]) continue;
    visited[u] = true;

    for (auto &edge : graph[u]) {
        int v = edge.first;
        int w = edge.second;
        if (dist[u] + w zuojiankuohaophpcn dist[v]) {
            dist[v] = dist[u] + w;
            pq.push({dist[v], v});
        }
    }
}

}

Floyd-Warshall算法:多源最短路径

可以求出图中任意两点之间的最短路径,适合小规模图或需要所有点对距离的情况。

蓝心千询
蓝心千询

蓝心千询是vivo推出的一个多功能AI智能助手

下载

基于动态规划,通过中间点逐步更新最短路径。

- 时间复杂度 O(V³),空间复杂度 O(V²) - 可处理负权边(但不能有负权环)

示例代码:

立即学习C++免费学习笔记(深入)”;

#include 
using namespace std;

const int INF = 0x3f3f3f3f; int dist[500][500]; // dist[i][j] 表示 i 到 j 的最短距离

void floyd(int n) { for (int k = 1; k <= n; k++) for (int i = 1; i <= n; i++) for (int j = 1; j <= n; j++) if (dist[i][k] < INF && dist[k][j] < INF) dist[i][j] = min(dist[i][j], dist[i][k] + dist[k][j]); }

如何选择合适的方法?

根据实际问题选择:

- 只关心一个起点到其他点的距离 → 用 Dijkstra - 需要知道任意两点间的最短路径 → 用 Floyd - 图中有负权边但无负环 → 考虑 Bellman-Ford 或 SPFA(可自行实现) - 点数少(如 ≤ 500)→ Floyd 更方便 - 点数多但边少 → Dijkstra + 邻接表更高效

基本上就这些。关键是理解算法适用条件,并正确建图和初始化距离数组。注意INF值不要设太大导致溢出,也不要太小影响判断。

相关专题

更多
堆和栈的区别
堆和栈的区别

堆和栈的区别:1、内存分配方式不同;2、大小不同;3、数据访问方式不同;4、数据的生命周期。本专题为大家提供堆和栈的区别的相关的文章、下载、课程内容,供大家免费下载体验。

360

2023.07.18

堆和栈区别
堆和栈区别

堆(Heap)和栈(Stack)是计算机中两种常见的内存分配机制。它们在内存管理的方式、分配方式以及使用场景上有很大的区别。本文将详细介绍堆和栈的特点、区别以及各自的使用场景。php中文网给大家带来了相关的教程以及文章欢迎大家前来学习阅读。

558

2023.08.10

页面置换算法
页面置换算法

页面置换算法是操作系统中用来决定在内存中哪些页面应该被换出以便为新的页面提供空间的算法。本专题为大家提供页面置换算法的相关文章,大家可以免费体验。

380

2023.08.14

苹果官网入口直接访问
苹果官网入口直接访问

苹果官网直接访问入口是https://www.apple.com/cn/,该页面具备0.8秒首屏渲染、HTTP/3与Brotli加速、WebP+AVIF双格式图片、免登录浏览全参数等特性。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

115

2025.12.24

拼豆图纸在线生成器
拼豆图纸在线生成器

拼豆图纸生成器有PixelBeads在线版、BeadGen和“豆图快转”;推荐通过pixelbeads.online或搜索“beadgen free online”直达官网,避开需注册的诱导页面。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

84

2025.12.24

俄罗斯搜索引擎yandex官方入口地址(最新版)
俄罗斯搜索引擎yandex官方入口地址(最新版)

Yandex官方入口网址是https://yandex.com。用户可通过网页端直连或移动端浏览器直接访问,无需登录即可使用搜索、图片、新闻、地图等全部基础功能,并支持多语种检索与静态资源精准筛选。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

553

2025.12.24

JavaScript ES6新特性
JavaScript ES6新特性

ES6是JavaScript的根本性升级,引入let/const实现块级作用域、箭头函数解决this绑定问题、解构赋值与模板字符串简化数据处理、对象简写与模块化提升代码可读性与组织性。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

155

2025.12.24

php框架基础知识汇总
php框架基础知识汇总

php框架是构建web应用程序的架构,提供工具和功能,以简化开发过程。选择合适的框架取决于项目需求和技能水平。实战案例展示了使用laravel构建博客的步骤,包括安装、创建模型、定义路由、编写控制器和呈现视图。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

20

2025.12.24

Word 字间距调整方法汇总
Word 字间距调整方法汇总

本专题整合了Word字间距调整方法,阅读下面的文章了解更详细操作。

47

2025.12.24

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
10分钟--Midjourney创作自己的漫画
10分钟--Midjourney创作自己的漫画

共1课时 | 0.1万人学习

Midjourney 关键词系列整合
Midjourney 关键词系列整合

共13课时 | 0.8万人学习

AI绘画教程
AI绘画教程

共2课时 | 0.2万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号