Hiking in the mountains is seldom an easy task for most people, as it is extremely easy to get lost during the trip. Recently Green has decided to go on a hiking trip. Unfortunately, half way through the trip, he gets extremely tired and so needs to find the path that will bring him to the destination with the least amount of time. Can you help him? You've obtained the area Green's in as an R * C map. Each grid in the map can be one of the four types: tree, sand, path, and stone. All grids not containing stone are passable, and each time, when Green enters a grid of type X (where X can be tree, sand or path), he will spend time T(X). Furthermore, each time Green can only move up, down, left, or right, provided that the adjacent grid in that direction exists. Given Green's current position and his destination, please determine the best path for him.
 
Input
There are multiple test cases in the input file. Each test case starts with two integers R, C (2 <= R <= 20, 2 <= C <= 20), the number of rows / columns describing the area. The next line contains three integers, VP, VS, VT (1 <= VP <= 100, 1 <= VS <= 100, 1 <= VT <= 100), denoting the amount of time it requires to walk through the three types of area (path, sand, or tree). The following R lines describe the area. Each of the R lines contains exactly C characters, each character being one of the following: ‘T’, ‘.’, ‘#’, ‘@’, corresponding to grids of type tree, sand, path and stone. The final line contains four integers, SR, SC, TR, TC, (0 <= SR < R, 0 <= SC < C, 0 <= TR < R, 0 <= TC < C), representing your current position and your destination. It is guaranteed that Green's current position is reachable – that is to say, it won't be a '@' square. There is a blank line after each test case. Input ends with End-of-File.
 
Output
For each test case, output one integer on one separate line, representing the minimum amount of time needed to complete the trip. If there is no way for Green to reach the destination, output -1 instead.
 
Sample Input
4 6
1 2 10
T...TT
TTT###
TT.@#T
..###@
0 1 3 0
 
4 6
1 2 2
T...TT
TTT###
TT.@#T
..###@
0 1 3 0
 
2 2
5 1 3
T@
@.
0 0 1 1
 
Sample Output
Case 1: 14
Case 2: 8
Case 3: -1
 
题意:给出地图,有path, sand, tree, stone。分别给出经过path, sand, or tree所需的时间,stone是不能通过的。给出起点和终点。问最少的时间达到。不能到达
输出-1,否则输出最少时间。
 
解析:很明显的优先队列搜索。
 
代码
#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(优先队列搜索)的更多相关文章

  1. hdu - 1242 Rescue && hdu - 2425 Hiking Trip (优先队列+bfs)

    http://acm.hdu.edu.cn/showproblem.php?pid=1242 感觉题目没有表述清楚,angel的朋友应该不一定只有一个,那么正解就是a去搜索r,再用普通的bfs就能过了 ...

  2. hdu 2425 Hiking Trip (bfs+优先队列)

    Problem Description Hiking in the mountains is seldom an easy task for most people, as it is extreme ...

  3. hdu 2425 Hiking Trip

    题目连接 http://acm.hdu.edu.cn/showproblem.php?pid=2425 Hiking Trip Description Hiking in the mountains ...

  4. HDU2425:Hiking Trip(BFS+优先队列)

    给出一个地图,地图有四种路面,经过每种路面花费的时间不同,问从起点到终点所花费的最少时间是多少 把到各个点的花费存入队列中,然后弹出,即可得到最小 Sample Input 4 6 1 2 10 T. ...

  5. HDU2425:Hiking Trip(简单bfs,优先队列实现)

    题目: 传送门 题意很简单就不解释了,水题一道. #include <iostream> #include <string.h> #include <stdio.h> ...

  6. HDU 1896 Stones --优先队列+搜索

    一直向前搜..做法有点像模拟.但是要用到出队入队,有点像搜索. 代码: #include <iostream> #include <cstdio> #include <c ...

  7. HDU 5360 Hiking(优先队列)

    Hiking Time Limit: 6000/3000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others) Total S ...

  8. 【HDOJ】2425 Hiking Trip

    优先级队列+BFS. #include <iostream> #include <cstdio> #include <cstring> #include <q ...

  9. 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 ...

随机推荐

  1. 一个跨域请求的XSS漏洞再续

    上回提到,由于需要使用代理页面解决POST请求的跨域请求,需要在代理页面上执行传递的函数.所以我们做了白名单只有我们认可的回调函数才能在页面上执行,防止执行非法的JS方法,做脚本攻击. 我们所采用的方 ...

  2. maven java.lang.OutOfMemoryError:PermGEn space

    配置环境变量: JAVA_OPTS-Xms512m -Xmx1024m -XX:PermSize=256m -XX:MaxPermSize=512m   MAVEN_OPTS-Xms256m -Xmx ...

  3. Android播放音频的两种方式

    一种使用MediaPlayer,使用这种方式通常是播放比较长的音频,如游戏中的背景音乐. 代码如下: private MediaPlayer mPlayer = null; mPlayer = Med ...

  4. Sublime Text3 Package Control和Emmet插件安装方法

    因为初学前端,所以今天安装了Sumblime Text 3,然后就停不下来去找Package Control的安装方法. 网络上我找到并尝试过的方法有两种,我使用的是用Python代码去安装并成安装成 ...

  5. asp.net实现将网页存为mht格式文件,类似于网页另存为mht功能

    MHT 首先说一下什么是mht格式文件,MHT叫“web单一文件”,就是把网页中包含的图片,CSS文件以及HTML文件全部放到一个MHT文件里面,而且浏览器可以直接读取显示.可以通过ie浏览器将一个网 ...

  6. WPF DataGrid 之数据绑定--实例2

    1.前台Grid定义 <!--数据绑定--> <DataGrid Grid.Row="1" Name="gridOne" Margin=&qu ...

  7. Android应用中使用Popupmenu

    最终效果: 页面布局: <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns: ...

  8. DBHerperl类

    using System; using System.Collections.Generic; using System.Text; using System.Data; using System.D ...

  9. js-浏览器DOM

    1.window尺寸 适配所有浏览器的尺寸方案 var w=window.innerWidth|| document.documentElement.clientWidth|| document.bo ...

  10. jaxb xml to bean

    package www.garbin.com.utils; import javax.xml.bind.JAXBContext; import javax.xml.bind.JAXBException ...