博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
图论 k短路
阅读量:4493 次
发布时间:2019-06-08

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

用到A*

推两篇博客

板子

#include
#include
#include
#include
#include
#include
#include
#include
#include
using namespace std;const int INF=0x3f3f3f3f;typedef pair
pr;typedef long long ll;#define fi first#define se second#define me(x) memset(x, -1, sizeof(x))#define mem(x) memset(x, 0, sizeof(x))#define N 20000+5#define NIL -1struct edg{ int next, to, w;}edge[N], edge1[N];struct node{ int p, h, g; bool operator<(node x) const { return x.g+x.h
s;void init(){ s.clear(); cnt=0; cnt1=0; me(head); mem(vis); me(head1); mem(t); for(int i=1; i<=n; i++) dist[i]=INF;}void add(int u, int v, int w){ edge[cnt].w=w; edge[cnt].to=v; edge[cnt].next=head[u]; head[u]=cnt++;}void add1(int u, int v, int w){ edge1[cnt1].w=w; edge1[cnt1].to=v; edge1[cnt1].next=head1[u]; head1[u]=cnt1++;}void dijkstra(int z){ s.insert(z); dist[z]=0; while(s.size()) { int v=*s.begin(); s.erase(v); vis[v]=1; for(int i=head1[v]; ~i; i=edge1[i].next) { int t=edge1[i].to; if(!vis[t] && dist[t]>dist[v]+edge1[i].w) { s.erase(t); dist[t]=dist[v]+edge1[i].w; s.insert(t); } } }}priority_queue
que;int astar(int s, int e){ node x, y; x.g=0; x.h=0; x.p=s; que.push(x); while(que.size()) { x=que.top(); que.pop(); t[x.p]++; if(t[x.p]==k && x.p==e) return x.h+x.g; if(t[x.p]>k) continue; for(int i=head[x.p]; ~i; i=edge[i].next) { y.p=edge[i].to; y.g=dist[edge[i].to]; y.h=edge[i].w+x.h; que.push(y); } } return -1;}int main(){ int i, j, z; int x, y, u, v, w; while(cin>>n>>m) { init(); for(i=0; i
>u>>v>>w, add(u, v, w), add1(v, u, w); cin>>x>>y>>k; dijkstra(y); z=astar(x, y); cout<
<

 

转载于:https://www.cnblogs.com/op-z/p/11283027.html

你可能感兴趣的文章
Jquery Validate 相关参数及常用的自定义验证规则
查看>>
java8 base64使用
查看>>
使用eclipse学习java第二课
查看>>
Codeforces Round #469 (Div. 2)
查看>>
go简单模拟Redis数据库对应{key, value}的存取功能
查看>>
vue.js 弹层
查看>>
JavaScript:Number 对象
查看>>
事务同步多线程
查看>>
怎么去掉联系人、通话记录、拨号列表界面中的电话号码中间的空格?
查看>>
node.js常见的一些错误信息
查看>>
PG自动化测试
查看>>
MySQL启动出现The server quit without updating PID file错误解决办法
查看>>
什么是多租户
查看>>
jQuery的效果
查看>>
express node 框架介绍
查看>>
数据库读写分离及问题
查看>>
jquery then详解(三)
查看>>
Python import模块
查看>>
最大间隙问题。给定 n 个实数,求这n个实数在数轴上相邻2个数之间的最大差值,设计解最大间隙问题的线性时间算法。...
查看>>
BUCK/BOOST电路原理分析
查看>>