Dijkstra算法模板求有向图最短路c++实现

news/2024/11/18 16:26:00/

题目如下

给定一个 n个点 m 条边的有向图,图中可能存在重边和自环,所有边权均为非负值。

请你求出 11 号点到 n 号点的最短距离,如果无法从 1 号点走到 n 号点,则输出 −1。

输入格式

第一行包含整数 n 和 m。

接下来 m 行每行包含三个整数 x,y,z,表示存在一条从点 x 到点 y 的有向边,边长为 z。

输出格式

输出一个整数,表示 11 号点到 n 号点的最短距离。

如果路径不存在,则输出 −1−1。

数据范围

1≤n,m≤1.5×10^5 ,
图中涉及边长均不小于 00,且不超过 10000。
数据保证:如果最短路存在,则最短路的长度不超过 10^9。

输入样例:

3 3
1 2 2
2 3 1
1 3 4

输出样例:

3

 代码如下:

#include <iostream>
#include <queue>
#include <vector>
#include <climits>
using namespace std;typedef pair<int,int> pii;vector<int> Dijkstra(vector<vector<pii>>& graph, int start, int n){priority_queue<pii,vector<pii>,greater<pii>> q;vector<int> dist(n + 1, INT_MAX);vector<bool> visited(n + 1, false);dist[start] = 0;q.push({dist[start], start});while(!q.empty()){int u = q.top().second;q.pop();if(visited[u]){continue; }visited[u] = true;for(auto& i : graph[u]){int v = i.first, weight = i.second;if(dist[u] + weight < dist[v]){dist[v] = dist[u] + weight;q.push({dist[v],v});}}}return dist;
}int main(){int n = 0, m = 0;cin >> n >> m;vector<vector<pii>> graph(n + 1);while(m--){int x = 0, y = 0, z = 0;cin >> x >> y >> z;graph[x].push_back({y,z});}vector<int> dist = Dijkstra(graph, 1, n);if(dist[n] == INT_MAX){cout << "-1" << endl;}else{cout << dist[n] << endl;}return 0;
}

采用优先队列将入队的点从大到小排序(大在尾,小在头),dist[u]表示起点start到u的权重,visited[u]表示u结点是否被访问
思路:初始化dist数组,将dist[start] = 0,其余点设置成无穷大,遍历所有点,每次遍历都将更新起点到该点的距离,将未访问的点存入优先队列中,循环操作


http://www.ppmy.cn/news/851876.html

相关文章

作为技术人,如何突破自己的技术瓶颈,从而提高自己的核心竞争力

一、前言 不知不觉间&#xff0c;迎来了2021年的第一天。过去的2020年注定是一个不平凡一年&#xff0c;疫情来得太快就像龙卷风&#xff0c;短短数月就阻断了全世界范围内无数人与人之间的物理连接。这一年&#xff0c;我们戴了一年口罩&#xff1b;这一年&#xff0c;哪些逆…

人工智能有哪些突破

摘要&#xff1a; 本文讲述了在过去一年里人工智能在哪些方面获得了哪些突破。 AI子领域包括&#xff1a;机器学习&#xff08;ML&#xff09;&#xff0c;自然语言处理&#xff08;NLP&#xff09;&#xff0c;深度学习&#xff08;DL&#xff09;&#xff0c;机器人流程自动…

百度地图突破19级缩放限制解决方案

百度地图默认最大缩放级别为19级&#xff0c;但在某些场景中需要结合自定义贴图实现更高级别的视图 通过下面提供的两种方式就能自定义最大最小缩放层级 缩放到20级的效果图 方法一&#xff1a;通过自定义瓦片迂回方式设置 提示&#xff1a;请使用自己申请的《百度地图key》替…

自我突破

业精于勤&#xff0c;荒于嬉 —— 韩愈《进学解》 随着时间都积累&#xff0c;当自己对工作技能越来越熟练时&#xff0c;难免会陷入 舒适区 &#xff0c;此时就如同人生都 岔路口&#xff0c;突破过去就进入到 新的阶段 &#xff0c;不能则技术水平从此 止步不前。我笃信一个观…

python爬虫进阶,突破反脚本机制(反爬机制)

前言 相信大家在做爬虫或者自动化脚本时或多或少的都能遇到反爬机制&#xff08;或者说反脚本机制&#xff09;&#xff0c;最常见的反脚本机制都是在登录时进行验证&#xff0c;据本人大量实战&#xff08;帮粉丝写脚本&#xff09;发现&#xff0c;基本上只要有点水平的网站…

内网穿透轻松突破内网服务器并远程控制

本期看点&#xff1a; 大家熟知远程控制软件有TeamVeiw&#xff0c;向日葵等等 这些使用起来便捷方便 而当你想单独远程访问公司内部OA系统 由于内部系统并没有在公网&#xff0c;所以无法访问 怎么解决呢&#xff1f; 依靠内网穿透软件来实现 内网穿透无需购买服务器&#xf…

ATR波段突破策略

来源&#xff1a;mc官网 区间突破最常使用在日内程序里&#xff0c;不过波段的程序使用起来也不差&#xff0c;基本逻辑就是由开盘向上涨多少要突破作多&#xff0c;向下跌多少要突破做空&#xff0c;很单纯&#xff0c;最主要的因素只有这个突破的临界点是如何决定? 基本突…

leaflet maxZoom突破18

在leaflet中&#xff0c;默认的maxZoom为18。当你设置的值大于18后&#xff0c;然后缩放地图&#xff0c;虽然地图做出了缩放效果&#xff0c;但是你会发现地图变成空白&#xff0c;且http请求并未触发19的请求。如果需要加载高于zoom&#xff1a;18的瓦片图&#xff0c;可以按…