[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.但是每当我们的工作人员把上百件的衣服从商店运回到赛场的时候,却是非常累的!所以现在他们想要寻找最短的从商店到赛场的路线,你 ...
随机推荐
- javascript给输入框赋值的一个误区
一. 错误的示范 如下代码所示,如果需要用javascript获取id为username1, password1的输入框的值,将其写入id为username2, password2的输入框,那么红线区 ...
- Swift中如何使用 #if DEBUG
Swift暂时还不支持大多数的预处理宏操作,但是可以支持“#if/#else/#endif”语句. 下面进行简单的设置使 #if DEBUG 有效,更详细的内容见:http://stackoverfl ...
- zoj 3960 What Kind of Friends Are You?(哈希)
What Kind of Friends Are You? Time Limit: 1 Second Memory Limit: 65536 KB Japari Park is a larg ...
- Git之(一)Git是什么[转]
为什么使用Git 孔子曾经曰过的,名正则言顺 言顺则事成. 我们在学习一项新技术之前,弄清楚为什么要学它至关重要,至于为什么要学习Git,我用一段if-else语句告诉你原因: if(你相信我){ 我 ...
- 验证实现element-ui树形控件的自定义图标及右键菜单
许久不用,element-ui已经更新至2.4.1版本.直接进入今天的正题,前提是node.js的环境还有vue及elment-ui都已经安装.由于element-ui的官方文档中介绍比较粗略,试了许 ...
- xsl教程学习笔记
一 . Hello world 尝试: Hello.xml: <?xml version="1.0" encoding="UTF-8"?> < ...
- BZOJ - 3631 松鼠的新家 (树链剖分)
题目链接 树链剖分基础题,路径权值修改+差分 #include<bits/stdc++.h> using namespace std; typedef long long ll; ; in ...
- POJ2411Mondriaan's Dream(DP+状态压缩 or 插头DP)
问题: Squares and rectangles fascinated the famous Dutch painter Piet Mondriaan. One night, after prod ...
- CodeForces - 900D: Unusual Sequences (容斥&莫比乌斯&组合数学)
Count the number of distinct sequences a1, a2, ..., an (1 ≤ ai) consisting of positive integers such ...
- HIVE-几道经典的hive题目
建表相关语句在此,具体的数据自己制作吧 create table student(Sno int,Sname string,Sex string,Sage int,Sdept string)row f ...