图论(A*算法,K短路) :POJ 2449 Remmarguts' Date
| Time Limit: 4000MS | Memory Limit: 65536K | |
| Total Submissions: 25216 | Accepted: 6882 |
Description
"Prince Remmarguts lives in his kingdom UDF – United Delta of Freedom. One day their neighboring country sent them Princess Uyuw on a diplomatic mission."
"Erenow, the princess sent Remmarguts a letter, informing him that she would come to the hall and hold commercial talks with UDF if and only if the prince go and meet her via the K-th shortest path. (in fact, Uyuw does not want to come at all)"
Being interested in the trade development and such a lovely girl, Prince Remmarguts really became enamored. He needs you - the prime minister's help!
DETAILS: UDF's capital consists of N stations. The hall is numbered S, while the station numbered T denotes prince' current place. M muddy directed sideways connect some of the stations. Remmarguts' path to welcome the princess might include the same station twice or more than twice, even it is the station with number S or T. Different paths with same length will be considered disparate.
Input
The last line consists of three integer numbers S, T and K (1 <= S, T <= N, 1 <= K <= 1000).
Output
Sample Input
2 2
1 2 5
2 1 4
1 2 2
Sample Output
14
这题就是求K短路,裸的模板题~~~
#include <iostream>
#include <algorithm>
#include <cstdio>
#include <cstring>
#include <queue>
using namespace std; const int MAXN=,MAXM=;
int cnt,fir[MAXN],nxt[MAXM],to[MAXM],val[MAXM];
int rcnt,rfir[MAXN],rnxt[MAXM],rto[MAXM],rval[MAXM];
int dis[MAXN];
struct A{
int f,g,dot;
bool operator <(const A a)const{
return a.f<f;
}
}; void raddedge(int a,int b,int v)
{
rnxt[++rcnt]=rfir[a];rto[rcnt]=b;rfir[a]=rcnt;rval[rcnt]=v;
} void addedge(int a,int b,int v)
{
nxt[++cnt]=fir[a];to[cnt]=b;fir[a]=cnt;val[cnt]=v;
raddedge(b,a,v);
}
int vis[MAXN];
void Spfa(int src)
{
queue<int>q;
memset(dis,,sizeof(dis));
memset(vis,,sizeof(vis));
dis[src]=;vis[src]=;q.push(src);
while(!q.empty())
{
int node=q.front();q.pop();vis[node]=;
for(int i=rfir[node];i;i=rnxt[i])
if(dis[rto[i]]>dis[node]+rval[i]){
dis[rto[i]]=dis[node]+rval[i];
if(!vis[rto[i]])
q.push(rto[i]);
vis[rto[i]]=;
}
}
} int Astar(int s,int t,int k)
{
int cont=;
priority_queue<A>Q;
if(dis[s]==dis[])return -;
if(s==t)k++;
Q.push((A){dis[s],,s});
A node;
while(!Q.empty())
{
node=Q.top();Q.pop();
if(node.dot==t&&++cont==k)
return node.f;
for(int i=fir[node.dot];i;i=nxt[i])
Q.push((A){dis[to[i]]+node.g+val[i],node.g+val[i],to[i]});
}
return -;
} void Init()
{
cnt=rcnt=;
memset(fir,,sizeof(fir));
memset(rfir,,sizeof(rfir));
}
int main()
{
int x,y,k,n,m,v,s,t;
while(~scanf("%d%d",&n,&m)){
Init();
for(int i=;i<=m;i++){
scanf("%d%d%d",&x,&y,&v);
addedge(x,y,v);
}
scanf("%d%d%d",&s,&t,&k);
Spfa(t);
printf("%d\n",Astar(s,t,k));
}
return ;
}
图论(A*算法,K短路) :POJ 2449 Remmarguts' Date的更多相关文章
- poj 2449 Remmarguts' Date(第K短路问题 Dijkstra+A*)
http://poj.org/problem?id=2449 Remmarguts' Date Time Limit: 4000MS Memory Limit: 65536K Total Subm ...
- poj 2449 Remmarguts' Date(K短路,A*算法)
版权声明:本文为博主原创文章.未经博主同意不得转载. https://blog.csdn.net/u013081425/article/details/26729375 http://poj.org/ ...
- POJ 2449 Remmarguts' Date (K短路 A*算法)
题目链接 Description "Good man never makes girls wait or breaks an appointment!" said the mand ...
- POJ 2449 Remmarguts' Date(第k短路のA*算法)
Description "Good man never makes girls wait or breaks an appointment!" said the mandarin ...
- POJ 2449 Remmarguts' Date ( 第 k 短路 && A*算法 )
题意 : 给出一个有向图.求起点 s 到终点 t 的第 k 短路.不存在则输出 -1 #include<stdio.h> #include<string.h> #include ...
- poj 2449 Remmarguts' Date K短路+A*
题目链接:http://poj.org/problem?id=2449 "Good man never makes girls wait or breaks an appointment!& ...
- POJ 2449 - Remmarguts' Date - [第k短路模板题][优先队列BFS]
题目链接:http://poj.org/problem?id=2449 Time Limit: 4000MS Memory Limit: 65536K Description "Good m ...
- poj 2449 Remmarguts' Date (k短路模板)
Remmarguts' Date http://poj.org/problem?id=2449 Time Limit: 4000MS Memory Limit: 65536K Total Subm ...
- poj 2449 Remmarguts' Date 第k短路 (最短路变形)
Remmarguts' Date Time Limit: 4000MS Memory Limit: 65536K Total Submissions: 33606 Accepted: 9116 ...
随机推荐
- JavaScript - 运算符 == 与 === 的区别
在 JavaScript 中,运算符 == 与 === 都是用来比较两个值是否相等.但是这两个操作符有个不同的地方:== 并不表示严格相等,而 === 表示进行严格比较,不仅比较值,而且会比较变量的类 ...
- Unity3D 5.0简单的射线检测实现跳跃功能
这里是一个简单的跳跃,5.0和其他版本貌似不一样,并且,再起跳功能做的不完全. 不过一个基本的思路在这里. 1.首先,射线检测,这里是利用一个空对象,放到主角对象的下面 2.然后调节射线的位置,在主角 ...
- CSS3条件判断——@supports/window.CSS.supports()(转)
CSS3条件判断,听起来"不明觉厉",如果你对CSS稍为熟悉一点的话,你会发现CSS中的"@media"就是条件判断之一.是的,在CSS3的条件判断规范文档中包 ...
- selenium+eclipse+python环境
1.下载并安装jdk,配置环境变量: 2.下载并安装python,配置path系统环境变量:D:\Program Files\python34: 3.安装selenium,在安装好的python路径D ...
- while read line无法循环read文件
while read line 与for循环的区别 例子:要从一个ip列表中获取ip.port,然后ssh ip 到目标机器进行特定的command操作ssh -o StrictHostKeyChec ...
- xargs rm -rf 与 -exec rm
# find ./ -exec rm {} \; # find ./ | xargs rm -rf 两者都可以把find命令查找到的结果删除,其区别简单的说是前者是把find发现的结果一次性传给exe ...
- vim备注
① 用户path生效 在~/.bashrc中修改path,在~/.profile中source bashrc ② secureCRT着色方案 底色RGB:43 43 43 前景色RGB:221 221 ...
- 【转】iOS-Core-Animation-Advanced-Techniques(五)
原文:http://www.cocoachina.com/ios/20150105/10829.html 图层时间和缓冲 图层时间 时间和空间最大的区别在于,时间不能被复用 -- 弗斯特梅里克 在上面 ...
- Xcode断点的一些黑魔法
转自 只会左键断点?是时候试试这样那样断点了 编码不能没调试,调试不能没断点(Break Point).XCode的断点功能也是越来越强大. 基本断点 如下图,这种是最常用的断点,也是最容易设置.左键 ...
- FlightGear 视角控制
Flightgear提供了非常灵活的模块化功能 这里就简要记录一下视角切换功能 首先,需要了解一下Flightgear中的property tree的主要内容,这里暂略. http://wiki.fl ...