首页 > 基础资料 博客日记
Dijkstra算法简介
2026-04-03 23:00:02基础资料围观1次
这篇文章介绍了Dijkstra算法简介,分享给大家做个参考,收藏极客资料网收获更多编程知识
概述
定义
Dijkstra算法是由荷兰计算机科学家狄克斯特拉于1959年提出的,用于解决带权图的单源最短路径问题。该算法采用贪心策略,每次选择当前距离起点最近且未访问过的顶点,逐步扩展到终点。
时间复杂度
这个在于你的优化程度,我的是\(O(mlogn)\)
核心内容
在边权都不为负的前提下:
- 先把起点到自己的距离设为 0,其他点都设为无穷远。
- 每次在还没确定最短路的点里,选出离起点最近的那个点。
- 这个点的最短距离就固定了,不会再变。
- 再用这个点去更新它相邻点的距离,看看能不能走得更近。
- 重复直到所有点都确定完毕。
代码解析
#include <bits/stdc++.h>
using namespace std;
constexpr int N = 1e5 + 2;
vector<pair<int, int>> a[N]; // {能到的边,这两个边的边权}
int d[N]; // 当前的最短路,执行过程中可能多次修改
bool f[N]; // 还可不可能再被更新,true是不可以
inline void dij(int s) {
priority_queue<pair<int, int>, vector<pair<int, int>>, greater<pair<int, int>>> q; // 小的在前面
memset(d, 127, sizeof d); // 初始化极大值
d[s] = 0; // 原点到自己的距离为0
q.push({0, s}); // {这时的最短距离(不一定是最终的),点的编号}
while (!q.empty()) {
auto p = q.top();
q.pop();
int now = p.second; // 查找now点的可以更新临边
if (f[now]) continue; // 判断是否可能更优
f[now] = true; // 设为最优,不用更新
for (auto i : a[now]) { // 遍历可以直接到达的点
int x = i.first, y = i.second;
if (d[x] > d[now] + y) { // 判断是否可能更优
d[x] = d[now] + y; // 更新
q.push({d[x], x}); // 入队
}
}
}
}
signed main() {
int n, m, s;
cin >> n >> m >> s;
for (int i = 1; i <= m; i++) {
int u, v, w;
cin >> u >> v >> w;
a[u].push_back({v, w});
}
dij(s);
for (int i = 1; i <= n; i++) {
cout << d[i] << " "; // 输出到每一个点的最短距离
}
return 0;
}
听懂?点赞?
文章来源:https://www.cnblogs.com/PCMSFV/p/19819272
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:jacktools123@163.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:jacktools123@163.com进行投诉反馈,一经查实,立即删除!
标签:
上一篇:[网络协议/文件] `SMB` 协议:一种Windows主流的局域网网络文件共享协议
下一篇:没有了
相关文章
最新发布
- Dijkstra算法简介
- [网络协议/文件] `SMB` 协议:一种Windows主流的局域网网络文件共享协议
- 【EF Core】直接更新数据
- 【OpenClaw】通过 Nanobot 源码学习架构---(3)AgentLoop
- 200 行 Python 代码,从零手搓极简 Agent,吃透智能体核心原理!
- 微软前CTO长文控诉:Windows被搞成一锅粥!14年14次转变、17种GUI共存
- Prompt、Agent、Skill、MCP 到底是啥?用一家饭馆的后厨给你讲透
- Ant Design Ellipsis 中的判断逻辑 isEleEllipsis 方法非常消耗性能
- Harness Engineering 学习与实践
- 聊聊 ASP.NET Core 中间件和过滤器的区别

