POJ 2449 Remmarguts' Date(A*+SPFA)K短路问题
来源:互联网 发布:淘宝多久可以追加评价 编辑:程序博客网 时间:2024/06/12 22:34
转载请注明出处:http://blog.csdn.net/a1dark
#include<stdio.h>#include<string.h>#include<queue>#include<algorithm>using namespace std;#define INF 0x7ffffff#define MAXM 100005#define MAXN 1005struct node{ int to,next,val;}edge[MAXM],edge1[MAXM];struct node1{ int g,h; int to; bool operator<(node1 a)const { if(a.h==h)return a.g<g; return a.h<h; }};int head[MAXN],head1[MAXN];int dist[MAXN];int vis[MAXN];int Q[MAXM*5];int n,m,k,k1;void add(int x,int y,int val){ edge[k].to=y; edge[k].val=val; edge[k].next=head[x]; head[x]=k++;}void add1(int x,int y,int val){ edge1[k1].to=y; edge1[k1].val=val; edge1[k1].next=head1[x]; head1[x]=k1++;}void init(){ k=k1=0; memset(head,-1,sizeof(head)); memset(head1,-1,sizeof(head1));}void spfa(int s){ memset(vis,0,sizeof(vis)); for(int i=1;i<=n;i++) dist[i]=INF; dist[s]=0; int h=0,t=1; Q[0]=s; vis[1]=1; while(h<t) { int now=Q[h++]; vis[now]=0; for(int i=head1[now];i!=-1;i=edge1[i].next) { int w=edge1[i].to; if(dist[w]-dist[now]>edge1[i].val) { dist[w]=dist[now]+edge1[i].val; if(!vis[w]) { Q[t++]=w; vis[w]=1; } } } }}int Astar(int s,int e,int kth){ int cnt=0; priority_queue<node1>q; node1 now,next; now.to=s; now.g=0; now.h=dist[s]; q.push(now); while(!q.empty()) { next=q.top(); q.pop(); if(next.to==e) { cnt++; if(cnt==kth)return next.g; } for(int i=head[next.to];i!=-1;i=edge[i].next) { now.to=edge[i].to; now.g=next.g+edge[i].val; now.h=now.g+dist[now.to]; q.push(now); } } return -1;}int main(){ init(); scanf("%d%d",&n,&m); int a,b,v; int s,t,kth; for(int i=0;i<m;i++) { scanf("%d%d%d",&a,&b,&v); add(a,b,v); add1(b,a,v); } scanf("%d%d%d",&s,&t,&kth); if(s==t)kth++; spfa(t); int ans=Astar(s,t,kth); printf("%d\n",ans); return 0;}
0 0
- POJ 2449 Remmarguts' Date(A*+SPFA)K短路问题
- POJ 题目2449 Remmarguts' Date(K短路,A*+spfa)
- POJ 2449 Remmarguts' Date 第K短路 A* + SPFA
- poj 2449 Remmarguts' Date--k短路--spfa+A*
- poj 2449 Remmarguts' Date(K短路 Spfa+A*)
- poj 2449 Remmarguts' Date A*+spfa求第k短路
- POj 2449 Remmarguts' Date K短路 A*+SPFA
- poj 2449 Remmarguts' Date 求第k短路(SPFA+A*)
- POJ 2449 Remmarguts' Date(第k短路+spfa+A*搜索)
- POJ 2449 Remmarguts' Date (A*+K短路)
- POJ 2448(K短路,A*+SPFA) Remmarguts' Date
- POJ 2447 Remmarguts' Date【k短路 SPFA+A* 模板题】
- poj 2449 Remmarguts' Date(第K短路 A*)
- poj 2449 Remmarguts' Date(A*求第K短路)
- poj 2449 Remmarguts' Date(K短路,A*算法)
- POJ 2449 Remmarguts' Date(A* - 第K短路)
- poj 2449 Remmarguts' Date(第K短路 A*)
- (poj 2449 Remmarguts' Date)<A*-K短路模板>
- linux下 X11桌面 一个C语言调用Xlib创建窗口的小列子
- 计算直线的交点数
- 创新实验室实习生每周工作总结【实习第一周】
- 如何把一个苹果卖到100万?
- Linux 下统计文件夹中文件的数量
- POJ 2449 Remmarguts' Date(A*+SPFA)K短路问题
- 清明节作业
- Android opengl ES 实现后台绘图并保存成bitmap
- eclipse maven jetty调试方式
- 用AutoHotkey修改Windows8的键盘布局
- Windows核心编程(十九)DLL高级技术
- java进阶(5—2):JPanel 、文本框和标签、单选按钮和复选按钮
- bundler的原理
- 简单分析AppDelegate生命周期