//朴素Dijkstra 边权都是正数 稠密图:点和边差的比较多 #include<cstring> #include<iostream> #include<algorithm> using namespace std; ; int n, m; int g[N][N];//邻接矩阵 稠密图 int dist[N];//距离 从1到每个点的距离 当前的最短距离 bool st[N]; //每一次 找到当前没有确定最短路长度的点当中距离最小的那一个, //然后用1到j的距离…
AcWing 849 Dijkstra求最短路 I 题解 以此题为例介绍一下图论中的最短路算法.先让我们考虑以下问题: 给定一个 \(n\) 个点 \(m\) 条边的有向图(无向图),图中可能存在重边和自环,给定所有边的边权.请求出给定的一点到另一点的权值之和最小的一条路径. 上述问题即所谓的最短路问题.解决这类问题的常用最短路算法: \(Floyd\) 算法(多源最短路径) \(Dijkstra\) 算法(没有负权边的单源最短路径) \(Bellman\)-\(Ford\) 算法(含有负权边的…
地址 https://www.acwing.com/problem/content/description/851/ 给定一个n个点m条边的有向图,图中可能存在重边和自环,所有边权均为正值. 请你求出1号点到n号点的最短距离,如果无法从1号点走到n号点,则输出-1. 输入格式 第一行包含整数n和m. 接下来m行每行包含三个整数x,y,z,表示存在一条从点x到点y的有向边,边长为z. 输出格式 输出一个整数,表示1号点到n号点的最短距离. 如果路径不存在,则输出-1. 数据范围 1≤n≤5001≤…
给定一个n个点m条边的有向图,图中可能存在重边和自环,所有边权均为正值. 请你求出1号点到n号点的最短距离,如果无法从1号点走到n号点,则输出-1. 输入格式 第一行包含整数n和m. 接下来m行每行包含三个整数x,y,z,表示存在一条从点x到点y的有向边,边长为z. 输出格式 输出一个整数,表示1号点到n号点的最短距离. 如果路径不存在,则输出-1. 数据范围 1≤n≤5001≤n≤500,1≤m≤1051≤m≤105,图中涉及边长均不超过10000. 输入样例: 3 3 1 2 2 2 3 1…
地址 https://www.acwing.com/problem/content/description/852/ 给定一个n个点m条边的有向图,图中可能存在重边和自环,所有边权均为非负值. 请你求出1号点到n号点的最短距离,如果无法从1号点走到n号点,则输出-. 输入格式 第一行包含整数n和m. 接下来m行每行包含三个整数x,y,z,表示存在一条从点x到点y的有向边,边长为z. 输出格式 输出一个整数,表示1号点到n号点的最短距离. 如果路径不存在,则输出-. 数据范围 ≤n,m≤, 图中涉…
给定一个n个点m条边的有向图,图中可能存在重边和自环,所有边权均为正值. 请你求出1号点到n号点的最短距离,如果无法从1号点走到n号点,则输出-1. 输入格式 第一行包含整数n和m. 接下来m行每行包含三个整数x,y,z,表示存在一条从点x到点y的有向边,边长为z. 输出格式 输出一个整数,表示1号点到n号点的最短距离. 如果路径不存在,则输出-1. 数据范围 1≤n≤5001≤n≤500,1≤m≤1051≤m≤105,图中涉及边长均不超过10000. 输入样例: 3 3 1 2 2 2 3 1…
//稀疏图 点和边差不多 #include <cstring> #include <iostream> #include <algorithm> #include <queue> using namespace std; typedef pair<int, int> PII; ; int n, m; int h[N], e[N], ne[N], idx; int w[N];//表示权值 int dist[N]; bool st[N]; void…
//不存在负权回路 //边权可能为负数 #include <cstring> #include <iostream> #include <algorithm> using namespace std; , INF = 1e9; int n, m, Q; int d[N][N];//邻接矩阵 void floyd() {//动态规划 ; k <= n; k ++ ) ; i <= n; i ++ ) ; j <= n; j ++ ) d[i][j] =…
AcWing 851 spfa求最短路 题解 以此题为例介绍一下图论中的最短路算法 \(Bellman\)-\(Ford\) 算法.算法的步骤和正确性证明参考文章最短路径(Bellman-Ford算法) 松弛函数 对边集合 \(E\) 中任意边,\(w(u,v)\) 表示顶点 \(u\) 到顶点 \(v\) 的边的权值,用 \(d[v]\) 表示当前从起点 \(s\) 出发到顶点 \(v\) 的最短距离. 若存在边 \(e\),权值为 \(w(u,v)\),使得: \[d[v] > d[u] +…
嗯....   dijkstra是求最短路的一种算法(废话,思维含量较低,   并且时间复杂度较为稳定,为O(n^2),   但是注意:!!!!         不能处理边权为负的情况(但SPFA可以处理,今后会讲)   借一个何大佬的图,因为会在代码中提到红.绿.空三种颜色,以及小v,   通过图会比较清晰一些: 思路大约明白了下面就呈上带批注模板代码: #include <cstdio>//dijkstra求最短路 #include <cstring> #include <…