A*算法求K短路模板 POJ 2449
#include<cstdio>
#include<queue>
#include<cstring>
using namespace std;
const int maxn=2e6+5;
struct asd{
int from,to,next,val;
}b[maxn],b2[maxn];
int head[maxn],tot=1;
int h2[maxn],t2=1;
int n,m;
void ad(int aa,int bb,int cc){
b[tot].from=aa;
b[tot].to=bb;
b[tot].val=cc;
b[tot].next=head[aa];
head[aa]=tot++;
}
void ad2(int aa,int bb,int cc){
b2[t2].from=aa;
b2[t2].to=bb;
b2[t2].val=cc;
b2[t2].next=h2[aa];
h2[aa]=t2++;
}
struct jie{
int num,dis;
jie(int aa=0,int bb=0){
num=aa,dis=bb;
}
bool operator < (const jie& A) const{
return dis>A.dis;
}
};
priority_queue<jie> q;
int dis[maxn];
bool vis[maxn];
void DIJ(int xx){
dis[xx]=0;
q.push(jie(xx,0));
while(!q.empty()){
int now=q.top().num;
q.pop();
if(vis[now]) continue;
vis[now]=1;
for(int i=head[now];i!=-1;i=b[i].next){
int u=b[i].to;
if(dis[u]>dis[now]+b[i].val){
dis[u]=dis[now]+b[i].val;
q.push(jie(u,dis[u]));
}
}
}
}
struct as{
int qd,hx,gx;
as(int aa=0,int bb=0,int cc=0){
qd=aa,hx=bb,gx=cc;
}
bool operator < (const as& A) const{
return hx+gx>A.hx+A.gx;
}
};
int cnt[maxn];
priority_queue<as> qq;
int Astar(int s,int t,int k){
if(dis[s]==0x3f3f3f3f) return -1;
qq.push(as(s,dis[s],0));
while(!qq.empty()){
int nqd=qq.top().qd,nhx=qq.top().hx,ngx=qq.top().gx;
qq.pop();
cnt[nqd]++;
if(cnt[nqd]==k && nqd==t) return ngx;
if(cnt[nqd]>k) continue;
for(int i=h2[nqd];i!=-1;i=b2[i].next){
int u=b2[i].to;
qq.push(as(u,dis[u],ngx+b2[i].val));
}
}
return -1;
}
int main(){
memset(dis,0x3f,sizeof(dis));
memset(head,-1,sizeof(head));
memset(h2,-1,sizeof(h2));
scanf("%d%d",&n,&m);
for(int i=1;i<=m;i++){
int aa,bb,cc;
scanf("%d%d%d",&aa,&bb,&cc);
ad2(aa,bb,cc);
ad(bb,aa,cc);
}
int s,t,k;
scanf("%d%d%d",&s,&t,&k);
if(s==t) ++k;
DIJ(t);
printf("%d\n",Astar(s,t,k));
return 0;
}
A*算法求K短路模板 POJ 2449的更多相关文章
- 图论(A*算法,K短路) :POJ 2449 Remmarguts' Date
Remmarguts' Date Time Limit: 4000MS Memory Limit: 65536K Total Submissions: 25216 Accepted: 6882 ...
- K短路模板POJ 2449 Remmarguts' Date
Time Limit: 4000MS Memory Limit: 65536K Total Submissions:32863 Accepted: 8953 Description &qu ...
- bellman-ford算法求K短路O(n*m),以及判负环O(n*m)
#include<iostream> #include<algorithm> #include<cstring> using namespace std; cons ...
- Dijkstra算法求最短路模板
Dijkstra算法适合求不包含负权路的最短路径,通过点增广.在稠密图中使用优化过的版本速度非常可观.本篇不介绍算法原理.只给出模板,这里给出三种模板,其中最实用的是加上了堆优化的版本 算法原理 or ...
- k短路模板 POJ2449
采用A*算法的k短路模板 #include <iostream> #include <cstdio> #include <cstring> #include < ...
- A*算法的认识与求第K短路模板
现在来了解A*算法是什么 现在来解决A*求K短路问题 在一个有权图中,从起点到终点最短的路径成为最短路,第2短的路成为次短路,第3短的路成为第3短路,依此类推,第k短的路成为第k短路.那么,第k短路怎 ...
- POJ 2449Remmarguts' Date K短路模板 SPFA+A*
K短路模板,A*+SPFA求K短路.A*中h的求法为在反图中做SPFA,求出到T点的最短路,极为估价函数h(这里不再是估价,而是准确值),然后跑A*,从S点开始(此时为最短路),然后把与S点能达到的点 ...
- [poj2449]Remmarguts' Date(K短路模板题,A*算法)
解题关键:k短路模板题,A*算法解决. #include<cstdio> #include<cstring> #include<algorithm> #includ ...
- poj 2499第K短路模板
第k*短路模板(单项边) #include <iostream> #include <cstdio> #include <algorithm> #include & ...
随机推荐
- jsp页面用DBHelper实现简单的登陆验证
首先我们需要写一个简单的登陆页面login.jsp,然后用from表单提交给index.jsp页面.在index.jsp页面通过DBHelper连接数据库判断账号和密码,如果密码正确则显示登陆成功. ...
- 如何通过IAM打造零信任安全架构
万物互联时代来临,面对越来越严峻的企业网络安全及复杂的(如微服务,容器编排和云计算)开发.生产环境,企业 IT 急需一套全新的身份和访问控制管理方案. 为了满足企业需求,更好的服务企业用户,青云Qin ...
- 构建自己的jar包上传至Mvaen中央仓库和版本更新
构建自己的jar包上传至Mvaen中央仓库和版本更新 一直羡慕别人制造轮子,开源项目,供别人使用:我也想这样,可以自己才疏学浅,本次就将自己写小工具上传到Maven的中央仓库. 一步一步详细教程演示如 ...
- 如何修改centOS7的GUI图形界面
在安装Gnome包之前,需要检查一下安装源(yum)是否正常,因为需要在yum命令来安装gnome包. 第一步:先检查yum 是否安装了,以及网络是否有网络.如果这两者都没有,先解决网络,在解决yum ...
- [博主推荐]如何利用注册 的 bug 来疯狂注册,不停开小号"做"事情,支持 手机号&邮箱
[博主推荐]如何利用注册 的 bug 来疯狂注册,不停开小号"做"事情,支持 手机号&邮箱 非常简单 1.手机号注册: 用手机号注册 网站基本都支持 可以用推荐的网址: ...
- android中的逐帧动画
在android中实现动画最简单的一种方式就是使用逐帧动画(AnimationDrawable).逐帧动画的原理同最古老的动画机制是一样的,通过快速的播放一组变化微小的图片,在人眼的视差时间下,达到一 ...
- 单例模式的DCL方式,您不可不知道的知识点
单例模式的DCL是一种比较好的单例实现方式,面试中被问及的频率非常高,考察的方式也多种多样.这里简单整理了一下,这里面的每一个点最好都能够做到烂熟于心: 1 public class Test { 2 ...
- Windows程序设计(2) - API-02 文件系统
一.磁盘分区的基本概念 1.磁盘分区(Patitions): 分区就是物理存储设备分割成多个不同的逻辑上的存储设备.分区从实质上说就是对硬盘的一种格式化.当我们创建分区时,就已经设置好了硬盘的各项物理 ...
- 在群晖NAS上运行URLOS之后竟然能安装Discuz! Q!!
如果我们手头上有1台群晖NAS时,有没有考虑过把群晖NAS当成服务器来使用,这样会不会很有意思呢? 现在,我们终于可以尝试一番了,把群晖NAS变成一台实实在在的服务器,在上面跑各种运行环境!其实很简单 ...
- 解除git文件处于lock状态方法
解决办法: 去git文件夹下删除lock文件就可以