[poj2449]Remmarguts' Date(K短路模板题,A*算法)
解题关键:k短路模板题,A*算法解决。
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cstdlib>
#include<iostream>
#include<cmath>
#include<queue>
using namespace std;
typedef long long ll;
const int N=1e3+;
const int M=1e5+;
const int inf=1e9;
struct edge{
int v,w,nxt;
}e1[M],e2[M];
struct node{
int id;///当前节点编号
int f;//f表示经过当前节点的最短路,f=g+h
int g;//g表示S->当前节点的最短路
node(int id=,int f=,int g=):id(id),f(f),g(g){}
bool operator<(const node &a)const{
if(f==a.f) return g>a.g;
return f>a.f;
}
};
bool vis[N];
int tot,head1[N],head2[N],n,m,K;
int dis[N];//dis[i]表示当前点i到终点T的最短路径
void add_edge(int u,int v,int w){
e1[tot].v=v;e1[tot].w=w;e1[tot].nxt=head1[u];head1[u]=tot;
e2[tot].v=u;e2[tot].w=w;e2[tot].nxt=head2[v];head2[v]=tot;
tot++;
}//两个图
void spfa(int S){//更新每个点->n点的最短距离
queue<int>q;
fill(dis,dis+n+,inf);
dis[S]=;
vis[S]=;
q.push(S);
while(!q.empty()){
int x=q.front();q.pop();
vis[x]=;
for(int i=head2[x];~i;i=e2[i].nxt){
int v=e2[i].v,w=e2[i].w;
if(dis[v]>dis[x]+w){
dis[v]=dis[x]+w;
if(!vis[v]){
vis[v]=;
q.push(v);
}
}
}
}
}
int A_Star(int S,int T){
if(S==T) K++;//坑,题目要求必须走,s==t路程可能为0,所以K要加1
priority_queue<node>q;
q.push(node(S,,));
int cnt=;
while(!q.empty()){
node h=q.top();q.pop();
if(h.id==T){
if(++cnt==K){
return h.f;
}
}
for(int i=head1[h.id];~i;i=e1[i].nxt){
q.push(node(e1[i].v,h.g+e1[i].w+dis[e1[i].v],h.g+e1[i].w));//最短路更新k短路
}
}
return -;
}
int main(){
memset(head1,-,sizeof head1);
memset(head2,-,sizeof head2);
scanf("%d%d",&n,&m);
for(int i=,x,y,z;i<=m;i++){
scanf("%d%d%d",&x,&y,&z);
add_edge(x,y,z);
}
int S,T;
scanf("%d%d%d",&S,&T,&K);
spfa(T);//预处理,反向遍历
int ans=A_Star(S,T);
printf("%d\n",ans);
return ;
}
[poj2449]Remmarguts' Date(K短路模板题,A*算法)的更多相关文章
- poj2449 Remmarguts' Date K短路 A*
K短路裸题. #include <algorithm> #include <iostream> #include <cstring> #include <cs ...
- POJ 2449Remmarguts' Date K短路模板 SPFA+A*
K短路模板,A*+SPFA求K短路.A*中h的求法为在反图中做SPFA,求出到T点的最短路,极为估价函数h(这里不再是估价,而是准确值),然后跑A*,从S点开始(此时为最短路),然后把与S点能达到的点 ...
- 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短路模板题][优先队列BFS]
题目链接:http://poj.org/problem?id=2449 Time Limit: 4000MS Memory Limit: 65536K Description "Good m ...
- 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短路
题意就是要求第K短的路的长度(S->T). 对于K短路,朴素想法是bfs,使用优先队列从源点s进行bfs,当第K次遍历到T的时候,就是K短路的长度. 但是这种方法效率太低,会扩展出很多状态,所以 ...
- K短路模板POJ 2449 Remmarguts' Date
Time Limit: 4000MS Memory Limit: 65536K Total Submissions:32863 Accepted: 8953 Description &qu ...
- k短路模板 POJ2449
采用A*算法的k短路模板 #include <iostream> #include <cstdio> #include <cstring> #include < ...
- HDU 2544 最短路(模板题——Floyd算法)
题目: 在每年的校赛里,所有进入决赛的同学都会获得一件很漂亮的t-shirt.但是每当我们的工作人员把上百件的衣服从商店运回到赛场的时候,却是非常累的!所以现在他们想要寻找最短的从商店到赛场的路线,你 ...
随机推荐
- Enum Binding ItemsSource In WPF
Enum Binding ItemsSource In WPF 在WPF中枚举绑定到ItemsSource. 一.通过ObjectDataProvider 获取Enum数据源 首先我们定义一个En ...
- Webstorm设置Node.js智能提示
这两天在学习Node.js,在Webstorm上进行编辑时发现竟然没有智能提示!所以写这篇文章来帮助大家度过这个坑! File -> Settings -> Languages&F ...
- [转载] Java开发在线编辑Word同时实现全文检索
一.背景介绍 Word文档与日常办公密不可分,在实际应用中,当某一文档服务器中有很多Word文档,假如有成千上万个文档时,用户查找打开包含某些指定关键字的文档就变得很困难,一般情况下能想到的解决方案是 ...
- Spring_总结_03_装配Bean(二)_Java配置
一.前言 本文承接上一节:Spring_总结_03_装配Bean(一)之自动装配 上一节提到,装配Bean有三种方式,首先推荐自动装配.当自动装配行不通时,就需要采用显示配置的方式了. 显示配置有两种 ...
- java_报表_00_资源帖
一.精选资料 二.java api 1.jfreechart (1).Java-jfree报表(学习整理)----饼状图.柱状图.折线统计图 (2).Jfreechart打造专业图表-原来Jfreec ...
- JDK自动安装脚本
A:本脚本运行的机器,Linux B:待安装JDK的机器, Linux 首先在脚本运行的机器A上确定可以ssh无密码登录到待安装jdk的机器B上,然后就可以在A上运行本脚本: 代码如下: $ ./in ...
- poj-1426-Find The Multiple(打表水过)
思路: 2的最近可以整除的数是10 所以,很关键的一点,只要是偶数,例如: 6:2*3,可以拆分为能够被2整除和能够被3整除的乘积,所以,10*111=1110 144:72*2,8*9*2,2*2* ...
- Memorial for Nanjing victims today 南京大屠杀死难者公祭仪式今于南京举行 勿忘国耻,活捉小*日*本。
China will hold an annual memorial for the victims of the Nanjing Massacre today in the eastern city ...
- git公私钥的拷贝
1.场景 由于我换了一台电脑,为了能访问远程仓库,我就把原来电脑上的私钥和config文件拷贝过来 2.出现问题及解决方案 git clone server:xxx_service_express 报 ...
- opencv中VideoCapture和cvCapture有什么区别?
VideoCapture和cvCapture其实是一样的,你可以去看看源码,VideoCapture其实在内部调用了cvCapture.这是不同 版本的opencv导致的.我接触到的opencv有过一 ...