POJ2449 Remmarguts' Date

 #include <iostream>
#include <algorithm>
#include <queue>
#include <stdio.h>
using namespace std;
int m,n,s,t,k;
#define M 100005
#define N 1005
#define INF 100000000
int dis[N];
struct edge
{
int v,val,next;//边的终点,边权
edge(){}
edge(int _v,int _val,int _next){v=_v,val=_val,next=_next;}
}line[M],_line[M];
int head[M],_head[M]; struct dijnode
{
int v,dis;
dijnode(){}
dijnode(int _v,int _dis){v=_v,dis=_dis;}
friend bool operator <(const dijnode &a,const dijnode &b)
{
return a.dis>b.dis;
}
};
struct Anode
{
int v,g,h;//v:当前点 g:起点到点v距离 h:点v到终点距离
Anode(){}
Anode(int _v,int _g,int _h){v=_v,g=_g;h=_h;}
friend bool operator <(const Anode&a,const Anode&b)
{
return a.h+a.g>b.h+b.g;
}
};
void input(){
memset(head,-,sizeof(head));
memset(_head,-,sizeof(_head));
int u,v,val;
int e=,_e=;
for(int i=;i<m;i++)
{
scanf("%d%d%d",&u,&v,&val);
line[e]=edge(v,val,head[u]);
head[u]=e++;
_line[_e]=edge(u,val,head[v]);
_head[v]=_e++;
}
}
int vis[N];
void dijkstra()
{
memset(vis,,sizeof(vis));
priority_queue<dijnode>pq;
for(int i=;i<n;i++)
dis[i]=INF; dijnode node =dijnode(t,);
dis[t]=;
pq.push(node); while(!pq.empty())
{
dijnode tmp = pq.top();
pq.pop(); if(vis[tmp.v])continue;
vis[tmp.v]=;
for(int i=_head[tmp.v];i!=-;i=_line[i].next)
{
if(tmp.dis+_line[i].val<dis[_line[i].v])
{
dis[_line[i].v]=tmp.dis+_line[i].val;
pq.push(dijnode(_line[i].v,dis[_line[i].v]));
}
}
}
for(int i=;i<=n;i++)printf("%d\n",dis[i]); }
int kcnt[N];
int Astar()
{
if(dis[s]>=INF)return -;
memset(kcnt,,sizeof(kcnt));
priority_queue<Anode> pq;
pq.push(Anode(s,,dis[s]));
Anode node;
while(!pq.empty())
{
node = pq.top();
pq.pop();
if(kcnt[node.v]>=k)continue; kcnt[node.v]++;
if(kcnt[t]>=k)return node.g;
for(int i=head[node.v];i!=-;i = line[i].next)
{
pq.push(Anode(line[i].v,node.g+line[i].val,dis[line[i].v]));
}
}
return -; }
int main(int argc, const char * argv[])
{ while(scanf("%d%d",&n,&m)!=EOF)
{
input();
scanf("%d%d%d",&s,&t,&k);
dijkstra();
printf("%d\n",Astar());
}
}

K最短路 A*算法的更多相关文章

  1. POJ 2449 Remmarguts' Date (K短路 A*算法)

    题目链接 Description "Good man never makes girls wait or breaks an appointment!" said the mand ...

  2. POJ 2449 Remmarguts' Date ( 第 k 短路 && A*算法 )

    题意 : 给出一个有向图.求起点 s 到终点 t 的第 k 短路.不存在则输出 -1 #include<stdio.h> #include<string.h> #include ...

  3. 单源最短路dijkstra算法&&优化史

    一下午都在学最短路dijkstra算法,总算是优化到了我能达到的水平的最快水准,然后列举一下我的优化历史,顺便总结总结 最朴素算法: 邻接矩阵存边+贪心||dp思想,几乎纯暴力,luoguTLE+ML ...

  4. Remmarguts' Date(POJ2449+最短路+A*算法)

    题目链接:http://poj.org/problem?id=2449 题目: 题意:求有向图两点间的k短路. 思路:最短路+A*算法 代码实现如下: #include <set> #in ...

  5. 最短路Dijkstra算法的一些扩展问题

    最短路Dijkstra算法的一些扩展问题     很早以前写过关于A*求k短路的文章,那时候还不明白为什么还可以把所有点重复的放入堆中,只知道那样求出来的就是对的.知其然不知其所以然是件容易引发伤痛的 ...

  6. 【ACM程序设计】求短路 Floyd算法

    最短路 floyd算法 floyd是一个基于贪心思维和动态规划思维的计算所有点到所有点的最短距离的算法. P57-图-8.Floyd算法_哔哩哔哩_bilibili 对于每个顶点v,和任一顶点对(i, ...

  7. LC T668笔记 & 有关二分查找、第K小数、BFPRT算法

    LC T668笔记 [涉及知识:二分查找.第K小数.BFPRT算法] [以下内容仅为本人在做题学习中的所感所想,本人水平有限目前尚处学习阶段,如有错误及不妥之处还请各位大佬指正,请谅解,谢谢!] !! ...

  8. 【k短路&A*算法】BZOJ1975: [Sdoi2010]魔法猪学院

    Description 找出1~k短路的长度.   Solution k短路的求解要用到A*算法 A*算法的启发式函数f(n)=g(n)+h(n) g(n)是状态空间中搜索到n所花的实际代价 h(n) ...

  9. K短路 (A*算法) [Usaco2008 Mar]牛跑步&[Sdoi2010]魔法猪学院

    A*属于搜索的一种,启发式搜索,即:每次搜索时加一个估价函数 这个算法可以用来解决K短路问题,常用的估价函数是:已经走过的距离+期望上最短的距离 通常和Dijkstra一起解决K短路 BZOJ1598 ...

随机推荐

  1. Android环境配置及运行helloWord案例

      Android的环境搭建步骤,以及输出一个helloWorder 1:下载Android开发环境   及是: SDK adt-bundle-windows-x86_64-20140702 此时的版 ...

  2. linq 实现group by 不使用group关键字 等同lambad表达式中的group join 查询一对多关系

    return from orderInfo in orderEntity.x_s_orderInfo join oState in orderEntity.x_s_oStatuInfo on orde ...

  3. h5页面唤起app(iOS和Android),没有安装则跳转下载页面

    浏览器和app没有通信协议,所以h5不知道用户的手机释放安装了app.因此只能是h5去尝试唤起app,若不能唤起,引导用户去下载我们的app. 微信里屏蔽了 schema 协议,如果在微信中打开h5, ...

  4. iphone中button按钮显示为圆形解决

    iphone中button按钮显示为圆形解决: 添加样式: -webkit-appearance:button; 如果需要为直角: border-radius:0 在源码中添加如:style=&quo ...

  5. 在本地创建angular-ui/bootstrap项目

    在本地创建完整的angular-ui/Bootstrap项目 git clone the repo, then switch to the tag you want,then use grunt bu ...

  6. 漫谈Linux内核哈希表(1)

    关于哈希表,在内核里设计两个很重要的数据结构:    哈希链表节点: 点击(此处)折叠或打开 .x [include/linux/types.h]*/ struct hlist_node { stru ...

  7. NI Labview 将图形化系统设计用于肿瘤治疗

    NI Labview 将图形化系统设计用于肿瘤治疗 - Jeff Stevens, Sanarus 挑战:在严格的规则条例范围内保持设计过程的情况下,为通过FDA认证的等级II医疗设备进行设计.原型并 ...

  8. error C2664

    error C2664: “int CWnd::MessageBoxW(LPCTSTR,LPCTSTR,UINT)”: 无法将参数 1 从“const char [19]”转换为“LPCTSTR” n ...

  9. JavaScript-location:封装当前窗口正在打开的url的对象

    location:封装当前窗口正在打开的url的对象 href:完整的url protocol:协议 host:主机名+端口 hostname:主机名 port:端口 pathname:路径 hash ...

  10. Don't Block on Async Code【转】

    http://blog.stephencleary.com/2012/07/dont-block-on-async-code.html This is a problem that is brough ...