最短路径算法
单源最短路径,迪杰斯特拉算法
深巷wls
平平无奇
展开
-
P2910Clear And Present Danger S(Floyd算法)C++
P2910 [USACO08OPEN]Clear And Present Danger S 题目大致是说有一堆岛,岛之间有海盗,因此每一条边都有一个危险指数(权重),给出一段必须经过的路线,求从一号小岛走到N号小岛最小的危险指数是多少。 思路就是用弗洛伊德跑一遍,然后根据必须经过的路线求一下危险指数 #include<bits/stdc++.h>//万能头 using namespace std; int n,m,ans=0;//计数器 int dis[101][101],a[10001];原创 2021-07-21 17:54:33 · 355 阅读 · 0 评论 -
P2888 Cow Hurdles S(floyd算法)C++
P2888 [USACO07NOV]Cow Hurdles S 用佛洛依德进行新状态转移时,因为是以k作为中间点,所以牛跨过的最高高度是max(d[i][k],d[k][j]),但是在i->j的整条路径上,跨过的最高高度应该最小,所以最后要取一个MIN,即d[i][j]=min(max(d[i][k],d[k][j]),d[i][j]); 输入: 5 6 3 1 2 12 3 2 8 1 3 5 2 5 3 3 4 4 2 4 8 3 4 1 2 5 1 输出: 4 8 -1 #include原创 2021-07-21 17:43:11 · 217 阅读 · 0 评论 -
P1339 Heat Wave G(floyd算法)C++
P1339 [USACO09OCT]Heat Wave G 输入: 7 11 5 4 2 4 2 1 4 3 7 2 2 3 4 3 5 7 5 7 3 3 6 1 1 6 3 4 2 4 3 5 6 3 7 2 1 输出: 7 直接floyd算法走起: #include <iostream> #include <cstring> using namespace std; int c,t,ts,te,ti,dis[2501],f[2501][2501],fi,d; bool原创 2021-07-21 17:07:39 · 144 阅读 · 0 评论 -
P3371 【模板】单源最短路径(弱化版)
P3371 【模板】单源最短路径(弱化版) 输入样例: 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 #include<iostream> using namespace std; int head[100000],cnt; long long ans[1000000]; bool vis[1000000]; int m,n,s; struct edge { int to; int nextt; int wei; }原创 2021-07-19 17:28:19 · 436 阅读 · 0 评论 -
1223: 最短路(dijkstra算法)
输入 第一行两个正整数n,m用空格隔开(n≤100,m≤1000)代表n个顶点,m条边。 接下来m行每行三个整数u,v,w代表有一条权值为w的边从u到v,(1≤u,v≤n,1≤w≤100000)可能含有重边。 样例解释如上。 输出 一行n个数,含义如题目描述。 样例输入 6 10 1 2 3 3 4 2 2 4 7 1 3 4 1 4 3 1 5 10 2 5 4 5 6 5 5 3 2 2 6 1 样例输出 0 3 4 3 7 4 #include<bits/stdc++.h> using.原创 2021-05-24 20:24:03 · 389 阅读 · 0 评论 -
1562: PUBG(dijkstra算法)
1562: PUBG 时间限制: 1 Sec 内存限制: 128 MB 就是求单源最短路,迪杰斯特拉算法原创 2021-05-24 15:40:23 · 177 阅读 · 1 评论 -
第十二届蓝桥杯C++ E.路径(Dijkstra迪杰斯特拉算法)
E、路径 【问题描述】 小蓝学习了最短路径之后特别高兴,他定义了一个特别的图,希望找到图 中的最短路径。 小蓝的图由 2021 个结点组成,依次编号 1 至 2021。 对于两个不同的结点 a, b,如果 a 和 b 的差的绝对值大于 21,则两个结点 之间没有边相连;如果 a 和 b 的差的绝对值小于等于 21,则两个点之间有一条 长度为 a 和 b 的最小公倍数的无向边相连。 例如:结点 1 和结点 23 之间没有边相连;结点 3 和结点 24 之间有一条无 向边,长度为 24;结点 15 和结点原创 2021-05-23 11:32:14 · 601 阅读 · 0 评论 -
迪杰斯特拉算法
时间复杂度O(n^2) 迪杰斯特拉算法 const int INT = 32767; const int MAX = 10; int dis[MAX]; int path[MAX]; int A[MAX][MAX]; void Dijk(int v) { bool S[MAX]; // 判断是否已存入该点到S集合中 int n=MAX; for(int i=1; i<=n; ++i) {原创 2021-05-23 11:24:40 · 97 阅读 · 1 评论