[算法学习]A*求第k短路
2021-02-09 16:17
标签:优先 k短路 pop spfa this size 估计 code for st、en为起点、终点, dis数组为预处理的最短路 ptr结构体的定义: [算法学习]A*求第k短路 标签:优先 k短路 pop spfa this size 估计 code for 原文地址:https://www.cnblogs.com/leafsblogowo/p/12749535.html
其中g(x)指从初始状态到当前状态的花费,h(x)为当前状态到终状态的最小花费,以两者之和来估计起始状态到终状态的总花费f(x)
在A*算法中,通过优先搜索最符合要求的f(x)表示的状态以提升搜索效率
而此时我们需要优先对估价函数值较小的状态进行搜索
故而可以使用优先队列对数据进行处理
由于A*总能够优先搜索 当前所有队列中结点距离终状态最近的结点,所以每次搜索到终点时都是当前最近的路
所以当第k次搜索到终点时的路径长度就是k短路的长度了int cnt;
int Astar(){
if(st == en) k++;
if(dis[st] == inf) return -1;
priority_queue
struct ptr{
int now, F, g; // 当前点编号, 估价函数F, 当前路径g
bool operator const ptr& a) const {
if(this->F == a.F) return this->g > a.g;
return this->F > a.F;
}
};
上一篇:Java-水仙花数