当前位置: 首页 > news >正文

ZOJ 1649 Rescue(有敌人迷宫BFS)

题意 求迷宫中从a的位置到r的位置须要的最少时间  经过'.'方格须要1s  经过‘x’方格须要两秒  '#'表示墙

因为有1s和2s两种情况  须要在基础迷宫bfs上加些推断

令到达每一个点的时间初始为无穷大  当从一个点到达该点用的时间比他本来的时间小时  更新这个点的时间并将这个点入队  扫描全然图就得到答案咯

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

const int N = 205;
char mat[N][N];
int time[N][N], sx, sy;
int dx[4] = {0, 0, -1, 1};
int dy[4] = { -1, 1, 0, 0};
struct grid
{
    int x, y;
    grid(int xx = 0, int yy = 0): x(xx), y(yy) {}
};

void bfs()
{
    memset(time, 0x3f, sizeof(time));
    time[sx][sy] = 0;
    queue<grid> g;
    g.push(grid(sx, sy));

    while(!g.empty())
    {
        grid cur = g.front();
        g.pop();
        int cx = cur.x, cy = cur.y, ct = time[cx][cy];
        for(int i = 0; i < 4; ++i)
        {
            int nx = cx + dx[i], ny = cy + dy[i];
            if(mat[nx][ny] && mat[nx][ny] != '#')
            {
                int tt = ct + 1;
                if(mat[cx][cy] == 'x') ++tt;
                if(tt < time[nx][ny])
                {
                    time[nx][ny] = tt;
                    g.push(grid(nx, ny));
                }
            }
        }
    }
}

int main()
{
    int n, m, ex, ey;
    while (~scanf("%d%d", &n, &m))
    {
        memset(mat, 0, sizeof(mat));
        for(int i = 1; i <= n; ++i)
            scanf("%s", mat[i] + 1);
        for(int i = 1; i <= n; ++i)
            for(int j = 1; j <= m; ++j)
                if(mat[i][j] == 'a') sx = i, sy = j;
                else if(mat[i][j] == 'r') ex = i, ey = j;
        bfs();
        if(time[ex][ey] != time[0][0])
            printf("%d\n", time[ex][ey]);
        else
            printf("Poor ANGEL has to stay in the prison all his life.\n");
    }

    return 0;
}


相关文章:

  • linux平台从源码安装git【转】
  • java中super的作用
  • css 选择符中的 ,+,~,=,^,$,*,|,:,空格 的意思
  • android Settings 解析
  • 【转】HTML !--...-- 注释 、CSS/JS //注释 和 /*.....*/ 注释
  • 瑞典奶爸“坐月子”很酷,他们的育儿神器连布拉德皮特都在用
  • 陈松松:制作视频优先选择这5种类型,总有一个适合你
  • 数据挖掘十大经典算法--CART: 分类与回归树
  • PyTorch快速入门教程三(神经网络)
  • the import java.util.* cannot be resolve,怎么解决
  • 美国科技公司的“放权时代”:出走的创始人不在少数
  • JavaScript DOM 10 - 滚动
  • 与高通纠纷受关注 苹果利润或遭诺基亚侵权诉讼蚕食
  • Atlantis退出核心VDI软件和一体机市场
  • 精解Java中代理模式的实现
  • extjs4学习之配置
  • mysql 5.6 原生Online DDL解析
  • Puppeteer:浏览器控制器
  • 百度小程序遇到的问题
  • 搭建gitbook 和 访问权限认证
  • 道格拉斯-普克 抽稀算法 附javascript实现
  • 面试总结JavaScript篇
  • 前端面试题总结
  • 如何将自己的网站分享到QQ空间,微信,微博等等
  • 网页视频流m3u8/ts视频下载
  • 我的业余项目总结
  • 小程序开发中的那些坑
  • 硬币翻转问题,区间操作
  • raise 与 raise ... from 的区别
  • RDS-Mysql 物理备份恢复到本地数据库上
  • 通过调用文摘列表API获取文摘
  • ​Base64转换成图片,android studio build乱码,找不到okio.ByteString接腾讯人脸识别
  • ​LeetCode解法汇总2304. 网格中的最小路径代价
  • ​LeetCode解法汇总2670. 找出不同元素数目差数组
  • #每天一道面试题# 什么是MySQL的回表查询
  • $(function(){})与(function($){....})(jQuery)的区别
  • (4)事件处理——(2)在页面加载的时候执行任务(Performing tasks on page load)...
  • (function(){})()的分步解析
  • (超简单)构建高可用网络应用:使用Nginx进行负载均衡与健康检查
  • (论文阅读笔记)Network planning with deep reinforcement learning
  • (四)c52学习之旅-流水LED灯
  • .NET Core/Framework 创建委托以大幅度提高反射调用的性能
  • .net MySql
  • .NET/C# 如何获取当前进程的 CPU 和内存占用?如何获取全局 CPU 和内存占用?
  • .net8.0与halcon编程环境构建
  • /bin/bash^M: bad interpreter: No such file ordirectory
  • @converter 只能用mysql吗_python-MySQLConverter对象没有mysql-connector属性’...
  • [ Linux ] Linux信号概述 信号的产生
  • [20170728]oracle保留字.txt
  • [AIGC] 广度优先搜索(Breadth-First Search,BFS)详解
  • [Android]竖直滑动选择器WheelView的实现
  • [autojs]autojs开关按钮的简单使用
  • [AX]AX2012开发新特性-禁止表或者表字段
  • [BUUCTF]-PWN:[极客大挑战 2019]Not Bad解析
  • [BZOJ 1040] 骑士