• 【HDOJ】2425 Hiking Trip


    优先级队列+BFS。

     1 #include <iostream>
     2 #include <cstdio>
     3 #include <cstring>
     4 #include <queue>
     5 using namespace std;
     6 
     7 #define MAXN 25
     8 
     9 typedef struct node_st {
    10     int x, y, t;
    11     node_st() {}
    12     node_st(int xx, int yy, int tt) {
    13         x = xx; y = yy; t = tt;
    14     }
    15     friend bool operator < (node_st a, node_st b) {
    16         return a.t > b.t;
    17     }
    18 } node_st;
    19 
    20 char map[MAXN][MAXN];
    21 int visit[MAXN][MAXN];
    22 int dir[4][2] = {-1,0,1,0,0,-1,0,1};
    23 int n, m, vp, vs, vt;
    24 int sx, sy, ex, ey;
    25 
    26 bool outRange(int x, int y) {
    27     if (x<0 || x>=n || y<0 || y>=m)
    28         return true;
    29     return false;
    30 }
    31 
    32 int bfs() {
    33     int i, x, y, t;
    34     priority_queue<node_st> que;
    35     node_st node;
    36 
    37     if (map[ex][ey] == '@')
    38         return -1;
    39 
    40     memset(visit, 0, sizeof(visit));
    41     map[sx][sy] = '@';
    42     que.push(node_st(sx, sy, 0));
    43 
    44     while (!que.empty()) {
    45         node = que.top();
    46         if (node.x==ex && node.y==ey)
    47             return node.t;
    48         que.pop();
    49         for (i=0; i<4; ++i) {
    50             x = node.x + dir[i][0];
    51             y = node.y + dir[i][1];
    52             if (outRange(x, y) || map[x][y]=='@')
    53                 continue;
    54             if (map[x][y] == 'T')
    55                 t = node.t + vt;
    56             if (map[x][y] == '.')
    57                 t = node.t + vs;
    58             if (map[x][y] == '#')
    59                 t = node.t + vp;
    60             if (visit[x][y]==0 || visit[x][y]>t) {
    61                 que.push(node_st(x, y, t));
    62                 visit[x][y] = t;
    63             }
    64         }
    65     }
    66 
    67     return -1;
    68 }
    69 
    70 int main() {
    71     int i, t=0;
    72 
    73     while (scanf("%d %d", &n, &m) != EOF) {
    74         scanf("%d%d%d", &vp, &vs, &vt);
    75         for (i=0; i<n; ++i)
    76             scanf("%s", map[i]);
    77         scanf("%d%d%d%d", &sx, &sy, &ex, &ey);
    78         i = bfs();
    79         printf("Case %d: %d
    ", ++t, i);
    80     }
    81 
    82     return 0;
    83 }
  • 相关阅读:
    努力的意义是什么?
    那些成功学和鸡汤文没有告诉你的
    曾国藩:一勤天下无难事
    王健林台大演讲:谁没有艰辛的过往?
    什么样的能量才能支撑一个人走过人生的低谷和迷茫
    想成为大树,就不要和草去比
    马云:不吃苦,你要青春干嘛?
    微博运营要点
    numba学习教程
    机器学习的分类
  • 原文地址:https://www.cnblogs.com/bombe1013/p/3864124.html
Copyright © 2020-2023  润新知