关闭

[HDU 2312]Cliff Climbing[BFS]

标签: bfs
231人阅读 评论(0) 收藏 举报
分类:
题目链接:[HDU 2312]Cliff Climbing[BFS]

题意分析:

杰克可以从为'S'的点用任意一只脚向上爬,规定左脚爬完得用右脚,问:到达'T'的点需要的最少时间为多少?

解题思路:

从'S‘的点开始,向左右两边进行搜索。dis[i][j][2]代表,某只脚到达该点需要的最少时间,转移为dis[i][j][1 - sta] = min(dis[i][j][1 - sta], dis[i][j][sta] + time);例如左腿到达这点,那么之前的状态应该是右腿到达之前的点。

个人感受:

第一感觉,“刷表法”,然后想着dfs,然后觉得肯定要爆。就GG了。我竟然忘了有BFS这种东西= =。不过左右两个方向各设一个状态这点没想到,所以自己想的整个转移也非常麻烦Orz

具体代码如下:

#include<cstdio>
#include<iostream>
#include<queue>
using namespace std;

const int INF = 0x7f7f7f7f;
const int MAXN = 100;

struct Node{
    int h, w, sta;
    Node(int _h, int _w, int _sta):h(_h), w(_w), sta(_sta){}
};
char mp[MAXN][MAXN][2];
int dis[MAXN][MAXN][2];
int dir[2][9][2] = {{-1, -2, -1, -1, -2, -1, -1, 0, -2, 0, -3, 0, -1, 1, -2, 1, -1, 2},
                    {1, -2, 1, -1, 2, -1, 1, 0, 2, 0, 3, 0, 1, 1, 2, 1, 1, 2}};



int main()
{
    int w, h;
    while (~scanf("%d%d", &w, &h) && (w | h))
    {
        queue<Node> q;
        for (int i = 0; i < h; ++i)
            for (int j = 0; j < w; ++j)
            {
                dis[i][j][0] = dis[i][j][1] = INF;
                scanf("%s", mp[i][j]);
                if (mp[i][j][0] == 'S')
                {
                    q.push(Node(i, j, 0)); q.push(Node(i, j, 1));
                    dis[i][j][0] = dis[i][j][1] = 0;
                }
            }

        int ans = INF;
        while (q.size())
        {
            Node cur = q.front(); q.pop();
            int nx, ny, sta = cur.sta;
            for (int i = 0; i < 9; ++i)
            {
                nx = cur.h + dir[sta][i][1], ny = cur.w + dir[sta][i][0];
                if (0 <= nx && nx < h && 0 <= ny && ny < w && mp[nx][ny][0] != 'X')
                {
                    int val = 0;
                    if (mp[nx][ny][0] != 'T') val = mp[nx][ny][0] - '0';
                    if (dis[nx][ny][1 - sta] > dis[cur.h][cur.w][sta] + val)
                    {
                        dis[nx][ny][1 - sta] = dis[cur.h][cur.w][sta] + val;
                        q.push(Node(nx, ny, 1 - sta));
                        if (mp[nx][ny][0] == 'T') ans = min(ans, dis[nx][ny][1 - sta]);
                    }
                }
            }
        }

        if (ans == INF) printf("-1\n");
        else printf("%d\n", ans);
    }
    return 0;
}


0
0
查看评论

poj 3328 Cliff Climbing 最短路 spfa

题意:
  • sepNINE
  • sepNINE
  • 2014-11-10 07:26
  • 501

Poj 3328的一种解法

题目描述:http://acm.pku.edu.cn/JudgeOnline/problem?id=3328 今天上午想把3328题做了,一看发现有点难。于是,便上网搜解题报告,最终还是没找到一个解题报告。决定自己把它搞定了。看了discussion,有人说要用优先队列和dij算法或者dfs再或者...
  • zhouy869
  • zhouy869
  • 2012-01-04 20:11
  • 357

zoj 3103 Cliff Climbing 优先队列+BFS

题目链接: 3103 题意: 一块N X M 的墙壁,求从S点出发 到T点的最短时间 每次只能爬一步,且只能左右脚交替爬行,墙上每个方块中的数字标明方块的"光滑 等级",标有数字t 的方块将花费他t 个单位时间安全地将他的脚踏在上面。...
  • AXuan_K
  • AXuan_K
  • 2015-02-04 21:23
  • 726

ZOJ-3103 Cliff Climbing

Cliff Climbing Time Limit: 10 Seconds      Memory Limit: 32768 KB At 17:00, special agent Jack starts to es...
  • u012325552
  • u012325552
  • 2014-09-09 09:32
  • 704

BFS广度优先搜索(2)--hdu1495(BFS变形题)

非常可乐 Limit:1000MS    Memory Limit:32768KB    64bit IO Format:%I64d & %I64u Description Input Ou...
  • Acmer_Sly
  • Acmer_Sly
  • 2016-09-11 22:52
  • 725

hdu3442(BFS)

链接:点击打开链接 题意:n*m的矩阵中,有五种防御设备,'A'伤害范围为2,杀伤力为1;'B'伤害范围为3,杀伤力为2;'C'只有当在那一个格时才能收到伤害,杀伤力为3;'D'伤害范围为2,杀伤力为4;'E'伤害范围为...
  • stay_accept
  • stay_accept
  • 2016-06-08 18:42
  • 271

BFS小结(持续更新中)

转载请注明出处,谢谢 http://blog.csdn.net/ACM_cxlove?viewmode=contents           by---cxlove 刚好yobobobo最近做B...
  • ACM_cxlove
  • ACM_cxlove
  • 2012-06-05 18:52
  • 6208

HDU(1010)bfs+剪枝 Tempter of the Bone

New~ 欢迎参加2016多校联合训练的同学们~                                   ...
  • qaz135135135
  • qaz135135135
  • 2016-07-23 10:08
  • 547

hdu3085(双向BFS)

http://acm.hdu.edu.cn/showproblem.php?pid=3085 题意:erriye 梦见女友被困在迷宫里了,现在 erriye 需要去解救他的的女友 题意:给出他女友和他的位置 题意:迷宫里有两个ghost,每秒钟会分生出多个ghost占据在他2步之内的所有格...
  • u013899738
  • u013899738
  • 2015-08-26 14:57
  • 627

zoj 3103 Cliff Climbing (SPFA)

Cliff Climbing Time Limit: 10 Seconds      Memory Limit: 32768 KB At 17:00, special agent Jack starts to escape from th...
  • u010228612
  • u010228612
  • 2013-08-12 18:43
  • 691
    个人资料
    • 访问:113649次
    • 积分:3346
    • 等级:
    • 排名:第11959名
    • 原创:228篇
    • 转载:8篇
    • 译文:0篇
    • 评论:29条
    联系我:
    最新评论