【图论】【A*搜索】[POJ2449]Remmarguts' Date
来源:互联网 发布:sql中in与all的区别 编辑:程序博客网 时间:2024/05/16 01:54
题目
本题实质是求第k短的路径;
SPFA+A*
进行启发式搜索直至访问终点k次,
估值函数:当前已经走的距离+当前点到终点的最短路
注意:当s==t时,要特判
#include<cstdio>#include<queue>#include<cstring>#include<cstdlib>using namespace std;#define MAXN 1000#define MAXM 100000queue<int>q;struct node2{ int pos,d,f; bool operator < (const node2 &x) const{ return f>x.f; }};priority_queue<node2>pq;int n,m,dist[MAXN+10],s,t,k;bool vis[MAXN+10];struct node{ int u,v,wt; node *next;}edge[MAXM*2+10],*adj[MAXN+10],*adj2[MAXN+10],*ecnt=&edge[0];void Read(int &x){ char c; while((c=getchar())&&c!=EOF) if(c>='0'&&c<='9'){ x=c-'0'; while((c=getchar())&&c>='0'&&c<='9') x=x*10+c-'0'; ungetc(c,stdin); return; }}void addedge(int u,int v,int wt){ node *p=++ecnt; p->v=v; p->wt=wt; p->next=adj[u]; adj[u]=p;}void addedge2(int u,int v,int wt){ node *p=++ecnt; p->v=v; p->wt=wt; p->next=adj2[u]; adj2[u]=p;}void read(){ Read(n),Read(m); int i,u,v,wt; for(i=1;i<=m;i++){ Read(u),Read(v),Read(wt); addedge(u,v,wt); addedge2(v,u,wt); } Read(s),Read(t),Read(k); if(s==t) k++;}void spfa(int s){ q.push(s); dist[s]=0; vis[s]=1; int u,v,wt; while(!q.empty()){ u=q.front(); q.pop(); vis[u]=0; for(node *p=adj2[u];p;p=p->next){ v=p->v,wt=p->wt; if(dist[v]>dist[u]+wt){ dist[v]=dist[u]+wt; if(!vis[v]){ q.push(v); vis[v]=1; } } } }}void Astar(){ node2 u,v; int cnt=0; u.pos=s,u.d=0,u.f=dist[s]; pq.push(u); while(!pq.empty()){ u=pq.top(); if(u.pos==t) cnt++; if(cnt==k){ printf("%d",u.d); exit(0); } pq.pop(); for(node *p=adj[u.pos];p;p=p->next){ v.pos=p->v; v.d=p->wt+u.d; v.f=v.d+dist[p->v]; pq.push(v); } }}int main(){ memset(dist,0x7f,sizeof dist); read(); spfa(t); Astar(); printf("-1");}
0 0
- 【图论】【A*搜索】[POJ2449]Remmarguts' Date
- 【A*搜索】poj2449 Remmarguts' Date
- poj2449 Remmarguts' Date A*搜索
- POJ2449 Remmarguts' Date A*搜索K短路
- 【POJ2449】Remmarguts' Date(A*搜索)
- poj2449 Remmarguts' Date A*
- poj2449 Remmarguts' Date (spfa+A*)
- [POJ2449] Remmarguts' Date(裸k短路)(A*搜索)
- 【A* + 第K短路】 poj2449 Remmarguts' Date
- poj2449 Remmarguts' Date 第K短路 A*
- poj2449 Remmarguts' Date A*K短路
- Remmarguts' Date poj2449 k短路 A*
- 【A*求K短路】POJ2449 Remmarguts' Date
- 【POJ2449】Remmarguts' Date (A* k短路)
- 学习记录——记忆化搜索 A* POJ2449 Remmarguts' Date
- POJ2449:Remmarguts' Date
- poj2449 Remmarguts' Date
- poj2449 Remmarguts' Date
- 安卓FragmentManager中FragmentTransaction的介绍
- UI空间大全
- 【图论】[二分图匹配] 模板
- HDU2473 - Junk-Mail Filter 利用虚拟数组实现删除并查集的节点
- 背包问题(课件内容(讲解,容易理解))
- 【图论】【A*搜索】[POJ2449]Remmarguts' Date
- leetcode 207: Course Schedule
- C/C++编程题之整数转IP地址
- 第49讲:Scala中Variance代码实战及其在Spark中的应用源码解析学习笔记
- codeforces 121C C. Lucky Permutation(数论+构造)
- 动态规划之最大子序列和
- LeetCode题解:Happy Number
- test 2.2-2
- 【图论】【二分图匹配】[HDU2819]Swap