POJ 2449
- #include<queue>
- #include<cstdio>
- #include<string>
- #include<cstring>
- #include<iostream>
- #include<algorithm>
- using namespace std;
- const int MAXN = 1010;
- const int MAXM = 100010;
- const int INF = 0x7fffffff;
- typedef struct{
- int to, next, w;
- }Edge;
- typedef struct Node{
- int p, g, h;
- Node(int p, int g, int h){
- this->p = p;
- this->g = g;
- this->h = h;
- }
- bool operator < (const Node &node) const{
- return node.g+node.h < g+h;
- }
- }Node;
- Edge edge[MAXM << 1];
- int n, m;
- int head[MAXN], tail[MAXN], dist[MAXN];
- int cnt[MAXN], vis[MAXN];
- void addEdge(int u, int v, int w, int k){
- edge[k].to = v;
- edge[k].w = w;
- edge[k].next = head[u];
- head[u] = k++;
- edge[k].to = u;
- edge[k].w = w;
- edge[k].next = tail[v];
- tail[v] = k;
- }
- void init(int s){
- memset(vis, 0, sizeof(vis));
- memset(cnt, 0, sizeof(cnt));
- for(int i = 1;i <= n;i ++) dist[i] = INF;
- dist[s] = 0;
- vis[s] = 1;
- }
- void spfa(int s){
- init(s);
- queue<int>q;
- q.push(s);
- while(!q.empty()){
- int p = q.front();
- vis[p] = 0;
- q.pop();
- for(int i = tail[p];~i;i = edge[i].next){
- int u = edge[i].to;
- if(dist[u] > dist[p] + edge[i].w){
- dist[u] = dist[p] + edge[i].w;
- if(!vis[u]){
- vis[u] = 1;
- q.push(u);
- }
- }
- }
- }
- }
- int aStar(int s, int t, int k){
- priority_queue<Node>Q;
- if(dist[s] == INF) return -1;
- Q.push(Node(s, 0, dist[s]));
- while(!Q.empty()){
- Node tt = Q.top();
- cnt[tt.p] ++ ;
- if(cnt[tt.p] > k) continue;
- if(cnt[tt.p] == k && tt.p == t) return tt.g+tt.h;
- Q.pop();
- for(int i = head[tt.p];~i;i = edge[i].next){
- int u = edge[i].to;
- Q.push(Node(u, tt.g+edge[i].w, dist[u]));
- }
- }
- return -1;
- }
- int main(){
- int s, t, k;
- int u, v, w;
- //freopen("in.c", "r", stdin);
- while(~scanf("%d%d", &n, &m)){
- memset(head, -1, sizeof(head));
- memset(tail, -1, sizeof(tail));
- k = 1;
- for(int i = 1;i <= m;i ++){
- scanf("%d%d%d", &u, &v, &w);
- addEdge(u, v, w, k);
- k += 2;
- }
- scanf("%d%d%d", &s, &t, &k);
- if(s == t) k++;
- spfa(t);
- int ans = aStar(s, t, k);
- printf("%d\n", ans);
- }
- return 0;
- }
POJ 2449的更多相关文章
- poj 2449 Remmarguts' Date 【SPFA+Astar】【古典】
称号:poj 2449 Remmarguts' Date 意甲冠军:给定一个图,乞讨k短路. 算法:SPFA求最短路 + AStar 以下引用大牛的分析: 首先,为了说话方便,列出一些术语: 在启示式 ...
- poj 2449 Remmarguts' Date K短路+A*
题目链接:http://poj.org/problem?id=2449 "Good man never makes girls wait or breaks an appointment!& ...
- poj 2449(A*求第K短路)
题目链接:http://poj.org/problem?id=2449 思路:我们可以定义g[x]为源点到当前点的距离,h[x]为当前点到目标节点的最短距离,显然有h[x]<=h*[x](h*[ ...
- 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 第k短路
题目链接:http://poj.org/problem?id=2449 #include<cstdio> #include<cstring> #include<iostr ...
- POJ 2449 - Remmarguts' Date - [第k短路模板题][优先队列BFS]
题目链接:http://poj.org/problem?id=2449 Time Limit: 4000MS Memory Limit: 65536K Description "Good m ...
- poj 2449 k短路+A*算法
http://poj.org/problem?id=2449 K短路的定义: 1.如果起点终点相同,那么0并不是最短路,而是要出去一圈回来之后才是最短路,那么第K短路也是一样. 2.每个顶点和每条边都 ...
- poj 2449 Remmarguts' Date(K短路,A*算法)
版权声明:本文为博主原创文章.未经博主同意不得转载. https://blog.csdn.net/u013081425/article/details/26729375 http://poj.org/ ...
- 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
[题目链接] http://poj.org/problem?id=2449 [算法] A*(启发式搜索) 首先,求第k短路可以用优先队列BFS实现,当T第k次入队时,就求得了第k短路,但是,这种做法的 ...
随机推荐
- Unix/Linux之命令备忘录
ps:是显示瞬间进程的状态,并不动态连续 kill:用于杀死进程或者给进程发送信号 // 在Linux下查看所有java进程命令 ps -ef | grep java: // 停止所有java进程命 ...
- ASP.NET MVC3实现无刷新验证码
在MVC中进行留言,评论等功能时,不可避免会用到表单提交时的验证码问题,有时,我们的作法是,当表单被提交后,在controller里去判断验证码的正确与否,但我认为这种用户体验是很差的,今天正好有后时 ...
- [CSS]white-space 属性详解
实例 规定段落中的文本不进行换行: p { white-space: nowrap } 可能的值 值 描述 normal 默认.空白会被浏览器忽略. pre 空白会被浏览器保留.其行为方式类似 HTM ...
- Python调试工具-Spyder
OS:Windows 7 关键字:Python IDE, Spyder 1.安装工具pip:https://pip.pypa.io/en/latest/installing.html 下载 get-p ...
- python zookeeper 学习笔记
1.安装zookeeper 下载zookeeper后,解压,安装 cd zookeeper-/src/c ./configure make make install 2.启动zookeeper服务 c ...
- JS-------DOM0级事件处理和DOM2级事件处理-------简单记法
0级DOM 分为2个:一是在标签内写onclick事件 二是在JS写onlicke=function(){}函数 1) <input id="myButton" type= ...
- Oracle表添加主键、外键
1.创建表的同时创建主键约束 (1)无命名 create table student ( studentid int primary key not null, studentname varchar ...
- python 脚本
mag3.py 1,import import sys from org.eclipse.jface.dialogs import MessageDialogfrom org.eclipse.core ...
- 制作标签(Label)
怎样判断是否应当使用标签 当游戏中出现需要程序输出文字的地方,就要使用标签. 创建标签 在Unity顶部选择NGUI菜单.选择Create->Label,即可创建一个Label. Label的文 ...
- cocos2dx Tab选项卡控件的实现
选项卡控件在游戏和应用中很是常见,但是cocostudio里并没有实现好的选项卡控件,于是自己封装了 一个,效果如下: 代码: TabUiControl.h #pragma once //std #i ...