Dijkstra算法用于求解单源最短路径问题,适用于带权有向图或无向图为正权重的情况。在C++中,可以通过邻接表建图,结合优先队列(最小堆)高效实现该算法。
使用vector嵌套pair的方式存储图,每个节点保存其邻居和对应边的权重。
typedef pair
vector
// 添加边
void addEdge(int u, int v, int weight) {
graph[u].push_back({weight, v});
}
从起点开始,维护一个距离数组dist[],初始设为无穷大,起点为0。使用priority_queue模拟最小堆,按距离排序。
vector
priority_queue
dist[start] = 0;
pq.push({0, start});
取出当前距离最小的节点,遍历其邻居,尝试更新最短距离。
while (!pq.empty()) {
int u = pq.top().second;
int d = pq.top().first;
pq.pop();
if (d > dist[u]) continue; // 已找到更短路径,跳过
for (auto& edge : graph[u]) {
int v = edge.second;
int w = edge.first;
if (dist[u] + w
dist[v] = dist[u] + w;
pq.push({dist[v], v});
}
}
}
以下是一个简单调用示例:
#include
using namespace std;
void dijkstra(vector
int n = graph.size();
dist.assign(n, INT_MAX);
dist[start] = 0;
priority_queue
pq.push({0, start});
while (!pq.empty())
{
int u = pq.top().second;
int d = pq.top().first;
pq.pop();
if (d != dist[u]) continue;
for (auto& edge : graph[u]) {
int v = edge.second;
int w = edge.first;
if (dist[u] + w
dist[v] = dist[u] + w;
pq.push({dist[v], v});
}
}
}
}
基本上就这些。只要图没有负权边,Dijkstra能正确计算出从起点到其余各点的最短距离。实际应用中注意节点编号范围和图的初始化即可。
# c++
# edge
# ai
# typedef
# if
# for
# while
# include
# auto
# continue
# int
# void
# 循环
# 堆
# using
# Namespace
# 算法
# 最短
# 遍历
# 或无
# 是一个
# 更短
# 设为
# 适用于
# 可以通过
# 并将
# 图为
相关栏目:
【
Google疑问12 】
【
Facebook疑问10 】
【
网络优化76771 】
【
技术知识130152 】
【
IDC云计算60162 】
【
营销推广131313 】
【
AI优化88182 】
【
百度推广37138 】
【
网站推荐60173 】
【
精选阅读31334 】
相关推荐:
Python邮件系统自动化教程_批量发送解析与模板应用
Win11怎么恢复出厂设置_Win11重置此电脑保留文件方法【详解】
Win11怎么设置麦克风权限_允许应用访问Win11麦克风【详解】
如何用正则与预处理结合精准拦截拼接式垃圾域名
Win10怎样安装PPT模板_Win10安装PPT模板教程【步骤】
php能跑在stm32上吗_php在stm32微控制器上的移植方法【介绍】
Python对象比较与排序_集合使用说明【指导】
如何用正则表达式精确匹配“start”到“end”之间最多含一个换行符的文本段
Python多线程使用规范_线程安全解析【教程】
Win10如何卸载Skype_Win10卸载Skype步骤【步骤】
Win11怎么禁用键盘自带键盘_Win11笔记本禁用内置键盘方法【教程】
Python数据挖掘进阶教程_分类回归与聚类案例解析
Go 中实现 Python urllib.quote() 功能的等效方法
如何使用Golang实现容器自动化运维_Golang Docker运维管理方法
如何使用Golang编写单元测试_创建Test函数验证业务逻辑
Windows10怎么查看硬件信息_Windows10硬件信息查询方法【指南】
php打包exe后无法写入文件_权限问题解决方法【教程】
海外搜索引擎推广效果怎么样,怎么分析效果!
Win11开始菜单打不开_修复Windows 11点击开始图标无响应【教程】
Win10如何更改任务栏高度_Windows10解锁任务栏调整大小
Win10如何更改电脑休眠时间_Windows10电源和睡眠选项调整
Mac怎么开启“任何来源”_Mac安装未签名应用的设置方法【解决】
c++怎么实现高并发下的无锁队列_c++ std::atomic原子变量与CAS操作【详解】
如何在 IIS 上为 ASP.NET 6 应用排除特定目录并交由 PHP 处理
c++如何使用std::bind绑定函数参数_c++ 占位符std::placeholders使用【详解】
php485函数执行慢怎么优化_php485性能提升小技巧【技巧】
如何高效识别并拦截拼接式恶意域名 spam
Win11怎么关闭开机声音_Win11系统启动提示音静音【教程】
Windows怎样关闭锁屏广告_Windows关闭锁屏广告方法【教程】
Win11怎么关闭触摸屏_禁用Win11笔记本触摸屏功能设置【教程】
Win11怎么开启游戏工具栏_Windows11 Xbox Game Bar快捷键
Win11相机打不开提示错误怎么修_相机权限开启与驱动修复【影像修复】
Python日志系统设计与实现_高可观测性架构实战
如何从 Go 的 map[string]interface{} 中安全获取值
Linux怎么实现内网穿透_Linux安装Frp客户端与服务端配置【方法】
如何外贸网站设计-能留住客户提升用户体验!
Win11怎么设置指纹解锁 Win11笔记本录入指纹登录【教程】
Mac怎么设置登录项_Mac管理开机自启动程序【教程】
mac怎么看硬盘大小_MAC查看磁盘存储空间与文件占用【详解】
php怎么操作Redis_Redis扩展连接与基本命令使用方法【方法】
c++ std::future和std::promise c++线程间通信【教程】
Win10文件历史记录怎么用 Win10开启自动备份文件教程【防丢】
如何更改Windows资源管理器的默认启动位置?(快速访问/此电脑)
如何解决Windows时间不准的问题?(自动同步设置)
Windows10怎么用“讲述人”读屏辅助 Windows10轻松使用开启讲述人朗读屏幕文字帮助视障用户【教程】
PHP主流架构怎么集成Redis缓存_配置步骤【方法】
win11 OneDrive怎么彻底关闭 Win11禁用并卸载OneDrive教程【分享】
Avalonia如何实现跨窗口通信 Avalonia窗口间数据传递
PHP 中 require() 语句返回值的用法详解
Win10怎样卸载iTunes_Win10卸载iTunes步骤【步骤】
2025-11-12
致胜网络推广营销网专注海外推广十年,是谷歌推广.Facebook广告全球合作伙伴,我们精英化的技术团队为企业提供谷歌海外推广+外贸网站建设+网站维护运营+Google SEO优化+社交营销为您提供一站式海外营销服务。