当前位置: 首页 > news >正文

信奥赛C++提高组csp-s之Dijkstra算法(朴素版)

信奥赛C++提高组csp-s之Dijkstra算法(朴素版)

邻接表+Dijkstra求解最短路(基础版)

题目描述

如题,给出一个有向图,请输出从某一点出发到所有点的最短路径长度。

输入格式

第一行包含三个整数n , m , s n,m,sn,m,s,分别表示点的个数、有向边的个数、出发点的编号。

接下来m mm行每行包含三个整数u , v , w u,v,wu,v,w,表示一条u → v u \to vuv的,长度为w ww的边。

输出格式

输出一行n nn个整数,第i ii个表示s ss到第i ii个点的最短路径,若不能到达则输出2 31 − 1 2^{31}-12311

输入样例
4 6 1 1 2 2 2 3 2 2 4 1 1 3 5 3 4 3 1 4 4
输出样例
0 2 4 3
说明/提示

【数据范围】
对于20 % 20\%20%的数据:1 ≤ n ≤ 5 1\le n \le 51n51 ≤ m ≤ 15 1\le m \le 151m15
对于40 % 40\%40%的数据:1 ≤ n ≤ 100 1\le n \le 1001n1001 ≤ m ≤ 10 4 1\le m \le 10^41m104
对于70 % 70\%70%的数据:1 ≤ n ≤ 1000 1\le n \le 10001n10001 ≤ m ≤ 10 5 1\le m \le 10^51m105
对于100 % 100\%100%的数据:1 ≤ n ≤ 10 4 1 \le n \le 10^41n1041 ≤ m ≤ 5 × 10 5 1\le m \le 5\times 10^51m5×1051 ≤ u , v ≤ n 1\le u,v\le n1u,vnw ≥ 0 w\ge 0w0∑ w < 2 31 \sum w< 2^{31}w<231,保证数据随机。

两个点之间可能有多条边,敬请注意。


题目分析:
  • 求从起点s到每个点的最短距离
  • 如果无法到达则输出2 31 − 1 2^{31}-12311
  • 节点数n ≤ 10 4 ,边数 m ≤ 5 × 10 5 n≤10^4,边数m≤5×10^5n104,边数m5×105
  • 适合使用邻接表存储,基础Dijkstra可过
代码实现:
#include<bits/stdc++.h>usingnamespacestd;constlonglongINF=(1LL<<31)-1;// 2^31-1constintMAXN=10005;intn,m,s;structEdge{intto;// 目标节点intweight;// 边权重};// 邻接表存储图vector<Edge>graph[MAXN];// 存储起点到各点的最短距离longlongdist[MAXN];// 标记节点是否已确定最短路径boolvisited[MAXN];voiddijkstra(intstart){// 初始化for(inti=1;i<=n;i++){dist[i]=INF;visited[i]=false;}dist[start]=0;// 循环n次,每次确定一个节点的最短路径for(inti=1;i<=n;i++){// 步骤1:从未确定节点中找到距离起点最近的节点intu=-1;longlongminDist=INF;for(intj=1;j<=n;j++){if(!visited[j]&&dist[j]<minDist){minDist=dist[j];u=j;}}// 标记节点u已确定最短路径visited[u]=true;// 步骤2:松弛操作,更新u的邻居节点的距离for(constEdge&edge:graph[u]){intv=edge.to;intw=edge.weight;// 如果通过u到v的距离更短,则更新if(!visited[v]&&dist[u]+w<dist[v]){dist[v]=dist[u]+w;}}}}intmain(){ios::sync_with_stdio(false);cin.tie(0);cin>>n>>m>>s;// 读取边信息,构建邻接表for(inti=1;i<=m;i++){intu,v,w;cin>>u>>v>>w;graph[u].push_back({v,w});}// 执行Dijkstra算法dijkstra(s);// 输出结果for(inti=1;i<=n;i++){cout<<dist[i]<<" ";}cout<<endl;return0;}

更多系列知识,请查看专栏:《信奥赛C++提高组csp-s知识详解及案例实践》:
https://blog.csdn.net/weixin_66461496/category_13113932.html

配套视频课信奥赛C++提高组csp-s知识详解
https://edu.csdn.net/course/detail/41081


各种学习资料,助力大家一站式学习和提升!!!

#include<bits/stdc++.h>usingnamespacestd;intmain(){cout<<"########## 一站式掌握信奥赛知识! ##########";cout<<"############# 冲刺信奥赛拿奖! #############";cout<<"###### 课程购买后永久学习,不受限制! ######";return0;}

1、csp信奥赛高频考点知识详解及案例实践:

CSP信奥赛C++动态规划:
https://blog.csdn.net/weixin_66461496/category_13096895.html点击跳转

CSP信奥赛C++标准模板库STL:
https://blog.csdn.net/weixin_66461496/category_13108077.html 点击跳转

信奥赛C++提高组csp-s知识详解及案例实践:
https://blog.csdn.net/weixin_66461496/category_13113932.html

2、csp信奥赛冲刺一等奖有效刷题题解:

信奥赛C++普及组csp-j初赛&复赛真题题解(持续更新)https://blog.csdn.net/weixin_66461496/category_12808781.html 点击跳转

信奥赛C++提高组csp-s初赛&复赛真题题解(持续更新)
https://blog.csdn.net/weixin_66461496/category_13125089.html

3、GESP C++考级真题题解:

GESP(C++ 一级+二级+三级)真题题解(持续更新):https://blog.csdn.net/weixin_66461496/category_12858102.html 点击跳转

GESP(C++ 四级+五级+六级)真题题解(持续更新):https://blog.csdn.net/weixin_66461496/category_12869848.html 点击跳转


GESP(C++ 七级+八级)真题题解(持续更新):
https://blog.csdn.net/weixin_66461496/category_13117178.html

4、csp/信奥赛C++,完整信奥赛系列课程(永久学习):

https://edu.csdn.net/lecturer/7901 点击跳转

· 文末祝福 ·

#include<bits/stdc++.h>usingnamespacestd;intmain(){cout<<"跟着王老师一起学习信奥赛C++";cout<<" 成就更好的自己! ";cout<<" csp信奥赛一等奖属于你! ";return0;}
http://www.zskr.cn/news/1507862.html

相关文章:

  • 2026年长城雪茄购买渠道全解析:从成都到香港,哪里买更靠谱? - 优质品牌商家
  • Spring Boot 实现过滤器(Filter)三种常用方式
  • 避开OV5640时钟配置的坑:PCLK计算不准导致图像异常的排查与修复指南
  • 第31篇:AI时代的前端工作流
  • 保姆级教程:用STM32的MPU为你的AUTOSAR应用划清内存“地盘”(附代码)
  • 2026年6月东莞制造业升级,3M VHB GPL160平台选择全攻略 - 品牌鉴赏官2026
  • 北邮网络课设:VC6.0下用select实现的轻量级DNS中继服务源码包
  • 2026年球场护栏网安装厂家怎么选?四川及全国主流服务商综合分析与案例参考 - 优质品牌商家
  • 别再说佳明不准了!手把手教你校准fēnix 7X心率,搞定极限运动数据漂移
  • 如何用foobox三分钟打造专业音乐播放器:foobar2000终极美化指南
  • 3大实战场景!用Buzz离线音频转写工具彻底改变你的音频处理方式
  • Java开发者的效率工具箱:提升编码速度的秘诀
  • DC-DC模块电源的FB引脚,除了调压还能怎么玩?一个运放电路带来的新思路
  • 深入PHY6222蓝牙协议栈:从simpleBLEPeripheral看GATT属性表的组织与交互逻辑
  • 实践:Triton Inference Server 吞吐量优化全解析
  • 告别手动录入:用Java+海康SDK实现明眸门禁人员信息自动同步(Spring Boot项目集成)
  • YTSage YouTube下载器详解
  • 从ICL7107到现代万用表:拆解一块老式数字表,聊聊模拟前端设计的演进
  • 5步完成低显存AI模型部署:24GB以下显卡实战指南
  • AI驱动的流域水–碳–氮多过程耦合模拟
  • 从“比例读数”到“真有效值”:聊聊ICL7107老芯片在万用表设计中的那些经典电路变种
  • 别再为OsgEarth加载天地图发愁了!手把手教你封装C++工具类(附完整源码)
  • 金色传说:SAP-SD-VF051科目确定报错深度排查与实战修复
  • Vehicle outbound
  • 2026图片去水印工具怎么选?免费电脑手机在线靠谱无广告软件推荐
  • 不只是空气和水:格子玻尔兹曼方法(LBM)在电池散热与芯片设计中的实战案例拆解
  • 终极指南:3分钟打造你的专属iTerm2终端配色方案
  • 从“策略指纹”到模仿学习:占用度量如何成为连接理论与实践的桥梁?
  • 从PHP 5到PHP 8:??运算符的演进与?:的经典用法全解析
  • ESP32S3日志打印不全?排查Channel for console output配置(USB/串口模式详解)