poj2449 第k短路】的更多相关文章

题目链接 学习博客:https://blog.csdn.net/Z_Mendez/article/details/47057461 k短路没有我想象的那么难,还是很容易理解的 求s点到t点的第k短路径 先求出t到所有点的最短路径,用g[i]表示t到i的距离 从s开始”bfs“,按照(g[i]+bfs路过的长度)构造优先队列,比如刚开始bfs路过长度为0,所在点为s 一直选择最小的(g[i]+bfs路过的长度),第一次到达t一定是从s沿着最短路径到达. 直到第k次到达t 理解代码可能更容易些 #i…
启发函数:f(x)=g(x)+h(x); g(x)表示初始点到x状态的代价,h(x)表示从x的状态到目标状态的代价的估计值(并不是真实的),实际最小代价<=h(x); 起点s,终点t,x.v=s,x.len=0;然后优先队列中f(x)值最小值出队列,再根据出队列的x.v状态发展下一层.如果出队列时第一次遇到x.v==t, 就找到了s到t的最短路....如果第k次,那就是第k短.为了加速计算,h(p)需要在A*搜索之前进行预处理,只要将原图的所有边反向, 再从终点t做一次单源点最短路径就能得到每个…
#include <cstdio> #include <cstring> #include <cmath> #include <algorithm> #include <queue> using namespace std; #define maxn 2008 #define maxm 2000008 #define INF 2000000000 ,SUM=; int h[maxn]; int s,t,k,n,m; bool pd[maxn];…
POJ2449 比较裸的K短路问题 K短路听起来高大上 实际思路并不复杂 首先对终点t到其他所有点求最短路 即为dist[] 然后由起点s 根据当前走过的距离+dist[]进行A*搜索 第k次到达t即为第K短路 代码也很简单 //数组开的不够 不一定是运行时错误! 可能也会WA #include<iostream> #include<cstdio> #include<cstdlib> #include<cstring> #include<cmath&g…
A*是bfs的优化,IDA*是dfs的优化 A*算法: 为启发式算法中很重要的一种,被广泛应用在最优路径求解和一些策略设计的问题中.而A*算法最为核心的部分,就在于它的一个估值函数的设计上: f(n)=g(n)+h(n) 其中f(n)是每个可能试探点的估值,它有两部分组成:一部分为g(n),它表示从起始搜索点到当前点的代价(通常用某结点在搜索树中的深度来表示).另一部分,即h(n),它表示启发式搜索中最为重要的一部分,即当前结点到目标结点的估值,h(n)设计的好坏,直接影响着具有此种启发式函数的…
采用A*算法的k短路模板 #include <iostream> #include <cstdio> #include <cstring> #include <algorithm> #include <cstdlib> #include <queue> using namespace std; const int MAXN=200005; int init(){ int rv=0,fh=1; char c=getchar(); whi…
1.到底如何求k短路的? 我们考虑,要求k短路,要先求出最短路/次短路/第三短路……/第(k-1)短路,然后访问到第k短路. 接下来的方法就是如此操作的. 2.f(x)的意义? 我们得到的f(x)更小,优先访问这个f(x)的点. 我们可以定义一组数{p,g,h},p是某一个点,g是估价,h是实际,那么g+h更小的点p会优先访问. 为什么呢?因为假设我们求出了w短路,接下来要求(w+1)短路,就要求最小的另一条路径. 应该易理解. 3.为什么选择最短路来估价? 很简单的选择,我们既然要求最短了,当…
解题关键:k短路模板题,A*算法解决. #include<cstdio> #include<cstring> #include<algorithm> #include<cstdlib> #include<iostream> #include<cmath> #include<queue> using namespace std; typedef long long ll; ; ; const int inf=1e9; str…
Remmarguts' Date Time Limit: 4000MS   Memory Limit: 65536K Total Submissions: 26355   Accepted: 7170 Description "Good man never makes girls wait or breaks an appointment!" said the mandarin duck father. Softly touching his little ducks' head, h…
题目链接:http://poj.org/problem?id=2449 题意:给出一个有向图,求s到t的第k短路: 思路:k短路模板题,可以用A_star模板过: 单源点最短路径+高级搜索A*;A*算法结合了启发式方法和形式化方法;启发式方法通过充分利用图给出的信息来动态地做出决定而使搜索次数大大降低;形式化方法不利用图给出的信息,而仅通过数学的形式分析; 算法通过一个估价函数f(h)来估计图中的当前点p到终点的距离,并由此决定它的搜索方向;当这条路径失败时,它会尝试其他路径;对于A*,估价函数…