Hdu2425-Hiking Trip(优先队列搜索)
#include<cstdio> #include<cstring> #include<string> #include<iostream> #include<sstream> #include<algorithm> #include<utility> #include<vector> #include<set> #include<map> #include<queue> #include<cmath> #include<iterator> #include<stack> using namespace std; const int INF=1e9+; const double eps=1e-; const int maxn=; int row,col,bex,bey,endx,endy; int P,S,T; int dx[]={-,,,},dy[]={,-,,}; //方向数组 char maze[maxn][maxn]; //地图 bool vis[maxn][maxn]; //标记数组 bool in(int x,int y){ return x>=&&x<row&y>=&&y<col; }//是否在界内 struct node { int x,y,d; node(int x=,int y=,int d=):x(x),y(y),d(d){} bool operator < (const node& t) const { return d>t.d; //越小的优先级越高 } }; priority_queue<node> que; int solve() { memset(vis,false,sizeof(vis)); while(!que.empty()) que.pop(); que.push(node(bex,bey,)); vis[bex][bey]=true; while(!que.empty()) { node t=que.top(); que.pop(); int x=t.x,y=t.y,d=t.d; if(x==endx&&y==endy) return d; for(int i=;i<;i++) { int nx=x+dx[i]; int ny=y+dy[i]; if(!in(nx,ny)||maze[nx][ny]=='@'||vis[nx][ny]) continue; //越界或是石头或已经被标记过 vis[nx][ny]=true; //标记 int nd=d; if(maze[nx][ny]=='T') nd+=T; else if(maze[nx][ny]=='.') nd+=S; else if(maze[nx][ny]=='#') nd+=P; que.push(node(nx,ny,nd)); //丢到优先队列里去 } } return -; } int main() { int Case=; while(scanf("%d%d",&row,&col)!=EOF) { scanf("%d%d%d",&P,&S,&T); for(int i=;i<row;i++) scanf("%s",maze[i]); scanf("%d%d%d%d",&bex,&bey,&endx,&endy); int ans=solve(); printf("Case %d: %d\n",++Case,ans); } return ; }
Hdu2425-Hiking Trip(优先队列搜索)的更多相关文章
- hdu - 1242 Rescue && hdu - 2425 Hiking Trip (优先队列+bfs)
http://acm.hdu.edu.cn/showproblem.php?pid=1242 感觉题目没有表述清楚,angel的朋友应该不一定只有一个,那么正解就是a去搜索r,再用普通的bfs就能过了 ...
- hdu 2425 Hiking Trip (bfs+优先队列)
Problem Description Hiking in the mountains is seldom an easy task for most people, as it is extreme ...
- hdu 2425 Hiking Trip
题目连接 http://acm.hdu.edu.cn/showproblem.php?pid=2425 Hiking Trip Description Hiking in the mountains ...
- HDU2425:Hiking Trip(BFS+优先队列)
给出一个地图,地图有四种路面,经过每种路面花费的时间不同,问从起点到终点所花费的最少时间是多少 把到各个点的花费存入队列中,然后弹出,即可得到最小 Sample Input 4 6 1 2 10 T. ...
- HDU2425:Hiking Trip(简单bfs,优先队列实现)
题目: 传送门 题意很简单就不解释了,水题一道. #include <iostream> #include <string.h> #include <stdio.h> ...
- HDU 1896 Stones --优先队列+搜索
一直向前搜..做法有点像模拟.但是要用到出队入队,有点像搜索. 代码: #include <iostream> #include <cstdio> #include <c ...
- HDU 5360 Hiking(优先队列)
Hiking Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 131072/131072 K (Java/Others) Total S ...
- 【HDOJ】2425 Hiking Trip
优先级队列+BFS. #include <iostream> #include <cstdio> #include <cstring> #include <q ...
- hdu 1026 Ignatius and the Princess I【优先队列+BFS】
链接: http://acm.hdu.edu.cn/showproblem.php?pid=1026 http://acm.hust.edu.cn/vjudge/contest/view.action ...
随机推荐
- c语言指针与结构体之内存动态分配
struct dangdangtest { ]; ]; ]; int num; int bugnum; ]; ]; double RMB; }; void main2() { //struct dan ...
- IOS UIlabel设置文本距离边框距离
自定义UILabel 继承 UILabel 重写drawTextInRect 方法具体如下: CGRect rect = CGRectMake(rect.origin.x + 5, rect.orig ...
- PyQt实现图片中心旋转
# -*- coding: cp936 -*- from PyQt4 import QtCore, QtGui, Qt class RotatePage(QtGui.QFrame): def __in ...
- NetAnalyzer笔记 之 五 一些抓包技巧分享(不定期更新)
[创建时间:2016-03-12 10:00:00] [更新时间:2016-05-21 10:00:00] NetAnalyzer下载地址 前一段时间应为工作关系,NetAnalyzer笔记系列已经很 ...
- JQuery或JavaScript获取网页的宽度、高等
最近多次使用JQery或JavaScript获取网页的宽度或者高度,在网上搜索N久之后发现很多都是粘贴上去并没有详细的介绍,这里我将会对经常使用的一些获取页面宽高的属性,方法做详细的介绍,以便能够更加 ...
- .NET 4.0 兼容 .NET 2.0 的方法
使用.net开发桌面应用,广大亲门最头疼的莫过于客户端部署的问题.基于.net 2.0 的winfrom程序因为 Framework 的分发包大小为20M左右还好解决,不幸的是如果项目中使用了Wcf, ...
- VC 串口通信类
为了节省时间,我就贴出来吧 头文件 SerialPort.h /******************************************************************** ...
- ADO.NET DataReader和DataAdapter的区别
SqlDataReader是一个向前的指针,本身并不包含数据,调用一次 Read() 方法它就向前到下一条记录,一个SqlDataReader必须单独占用一个打开的数据库连接. 在使用 SqlData ...
- RegExp子模式- "()"
读书笔记 把JavaScript权威指南拿出来瞅瞅,正巧看到了第十章 正则表达式的模式匹配 最初接触js的时候,基本上都是在做验证.什么数字验证.命名验证.身份证格式验证.电话号码验证.都是用正则表达 ...
- C++ 虚函数详解
C++ 虚函数详解 这篇文章主要是转载的http://blog.csdn.net/haoel/article/details/1948051这篇文章,其中又加入了自己的理解和难点以及疑问的解决过程,对 ...