博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
A* & IDA*搜索
阅读量:3953 次
发布时间:2019-05-24

本文共 1968 字,大约阅读时间需要 6 分钟。

f ( n ) = g ( n ) + h ( n ) f(n)=g(n)+h(n) f(n)=g(n)+h(n)

不但考虑前向代价,而且考虑后向代价。由于后向代价不可知,因而需要使用估价函数。

题目

求次短路,先反向SPFA准确求出 h ( n ) h(n) h(n)准确的后向代价,再用A*搜索,第几次去到终点就是第几短路

#include
using namespace std;using ll=long long;const int maxn=1e5+10;struct Edge{
int to; ll len; Edge(int a=0,ll b=0ll):to(a),len(b) {
} bool operator< (const Edge& e) const {
return len > e.len; }};struct Path{
int u; ll g,h; Path(int a,ll b,ll c):u(a),g(b),h(c) {
} bool operator< (const Path& p) const {
return g+h > p.g+p.h; }};struct E{
int to,next; ll len;}e[2*maxn];int n,m,head[maxn];ll h[maxn];bool vis[maxn];int cnt=0;void add(int v,int u,ll len){
e[cnt]={
u,head[v],len}; head[v]=cnt++; e[cnt]={
v,head[u],len}; head[u]=cnt++;}void spfa(){
queue
Q; Q.emplace(n); memset(vis,0,sizeof vis); memset(h,0x7f,sizeof h); h[n]=0; while(!Q.empty()){
int now=Q.front(); Q.pop();vis[now]=false; for(int i=head[now];~i;i=e[i].next){
if(e[i].len+h[now]>h[e[i].to])continue; h[e[i].to]=e[i].len+h[now]; if(vis[e[i].to])continue; vis[e[i].to]=true; Q.emplace(e[i].to); } }}ll Astar(){
priority_queue
Q; Q.emplace(1,0,h[1]); int cnt=0; while(!Q.empty()){
Path now=Q.top(); Q.pop(); if(now.u==n && ++cnt==2)return now.g+now.h; //次短路为2,若k短路改为++cnt==k for(int i=head[now.u];~i;i=e[i].next){
ll before=now.g+e[i].len,after=h[e[i].to]; Q.emplace(e[i].to,before,after); } } return 0;}int main(){
int T; cin>>T; while(T--){
cin>>n>>m; int u,v; for(int i=1;i<=n;++i) head[i]=-1; cnt=0; ll len; while(m--){
cin>>u>>v>>len; add(u,v,len); } spfa(); cout<
<

转载地址:http://jgkzi.baihongyu.com/

你可能感兴趣的文章
白话AI:看懂深度学习真的那么难吗?初中数学,就用10分钟
查看>>
中国癌症大数据出来了!每年126万例癌症死亡本可避免
查看>>
超全的 Linux 机器的渗透测试命令备忘表,共16表128条命令
查看>>
代码传奇 | 明明可以靠颜值 却用代码把人类送上了月球的女人——Margaret Hamilton
查看>>
教你用Java来玩答题(百万英雄/冲刺大会等)
查看>>
用Python做跳一跳外挂太浪费了,这种技能让你目瞪口呆
查看>>
如何在Python中快速进行语料库搜索:近似最近邻算法
查看>>
比特币这么火热,看看这篇比特币初学者指南
查看>>
快收藏! 30 分钟包你学会 AWK
查看>>
各平台的推荐算法,太贴切了!
查看>>
一张图学会Python3
查看>>
500款各领域机器学习数据集,总有一个是你要找的
查看>>
2017年终奖调查出炉 程序员年终奖多少你绝对猜不到
查看>>
写给大数据开发初学者的话 | 附教程
查看>>
分享 :17款工具,让你的数据更美观
查看>>
不必再费心寻找,2017最全的开发干货就在这1067页PDF里
查看>>
养蛙火爆,大数据解读《旅行青蛙》崛起之谜
查看>>
县级城市消费力排行榜,你的家乡排第几?
查看>>
红包外挂史及AccessibilityService分析与防御
查看>>
Python破解验证码,只要15分钟就够了!
查看>>