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

Nightmare --- 炸弹时间复位

题目大意:

       该题为走迷宫,其条件有如下6个:

1, 迷宫用二维数组来表示;

2, 人走动时不能越界,不能在墙上走;

3, 当走到出口时,若剩余时间恰好为0,则失败;

4, 找到炸弹复位装置,若剩余时间恰好为0,则不能使用;

5, 炸弹复位装置可以使用若干次;

6, 只要走到复位装置所在位置,时间自动复置为6;

其中,数组中,0表示墙,1表示通道,2表示初始位置,3表示出口,4表示炸弹复位装置;

求走出迷宫所需要的最少步数,若不能在炸弹爆炸前走出来,输出-1.

大概思路:

       迷宫问题是经典的BFS问题,首先获取初始位置,调用队列,使其入队,定义方向数组,分别用(0,-1)、(-1,0)、(0,1)、(1,0)表示下上左右四个方向,对当前位置的四个方向进行判定,若能走得通,则使其入队。

代码如下:  渣渣代码   不要被吓倒   看见题  想一想 就去干 ! 不要怂就是干 !

 1 #include<stdio.h>
 2 #include<string.h>
 3 #include<math.h>
 4 #include<iostream>
 5 #include<algorithm>
 6 #include<queue>
 7 #include<vector>
 8 #include<set>
 9 #include<stack>
10 #include<string>
11 #include<sstream>
12 #include<map>
13 #include<cctype>
14 using namespace std;
15 struct node
16 {
17     int x,y,time,step;
18 };
19 int a[10][10],n,m,b[4][2]={0,-1,0,1,-1,0,1,0},mark;
20 queue<node>Q;
21 int BFS(int x,int y)
22 {
23     node q={x,y,6,0};
24     Q.push(q);
25     while(!Q.empty())
26     {
27         node e=Q.front();
28         Q.pop();
29         for(int i=0;i<4;i++)
30         {
31             q.x=e.x+b[i][0],q.y=e.y+b[i][1],q.time=e.time-1,q.step=e.step+1;
32             if(q.x>=0&&q.x<m&&q.y>=0&&q.y<n&&q.time>0&&a[q.y][q.x]!=0)
33             {
34                 if(a[q.y][q.x]==3)
35                     return q.step;
36                 if(a[q.y][q.x]==4)
37                 {
38                     q.time=6;
39                     a[q.y][q.x]=0;
40                 }
41                 Q.push(q);
42             }
43         }
44     }
45     return -1;
46 }
47 int main()
48 {
49     int t,sx,sy;
50     scanf("%d",&t);
51     while(t--)
52     {
53         scanf("%d%d",&n,&m);
54         for(int i=0;i<n;i++)
55         {
56             for(int j=0;j<m;j++)
57             {
58                 scanf("%d",&a[i][j]);
59                 if(a[i][j]==2)
60                 {
61                     sx=j;
62                     sy=i;
63                 }
64             }
65         }
66         while(!Q.empty())
67             Q.pop();
68         mark=BFS(sx,sy);
69         printf("%d\n",mark);
70     }
71 }

 

转载于:https://www.cnblogs.com/A-FM/p/5350172.html

相关文章:

  • HDU 5655 CA Loves Stick 水题
  • 跟着实例学习ZooKeeper的用法: Barrier
  • Partition4:增加分区
  • Oracle创建表空间
  • succ
  • 新技能,利用Reflector来修改dll引用
  • 溢出隐藏
  • .Net转前端开发-启航篇,如何定制博客园主题
  • NTFS For Mac 的特点有哪些
  • 第十次课作业(风险管理、项目收尾、知识产权)
  • 5.jenkins使用Email Extension Plugin插件配置邮件通知
  • Fouandation(NSString ,NSArray,NSDictionary,NSSet) 中常见的理解错误区
  • 如何在Kettle4.2上面实现cassandra的输入与输出
  • hibernate延迟加载
  • EventBus (四) Sticky事件
  • 【译】React性能工程(下) -- 深入研究React性能调试
  • 4个实用的微服务测试策略
  • co.js - 让异步代码同步化
  • ES6语法详解(一)
  • HTTP请求重发
  • js递归,无限分级树形折叠菜单
  • Linux gpio口使用方法
  • maven工程打包jar以及java jar命令的classpath使用
  • PHP 程序员也能做的 Java 开发 30分钟使用 netty 轻松打造一个高性能 websocket 服务...
  • Vue--数据传输
  • 阿里云容器服务区块链解决方案全新升级 支持Hyperledger Fabric v1.1
  • 三分钟教你同步 Visual Studio Code 设置
  • 手机app有了短信验证码还有没必要有图片验证码?
  • 新手搭建网站的主要流程
  • 用Visual Studio开发以太坊智能合约
  • shell使用lftp连接ftp和sftp,并可以指定私钥
  • 函数计算新功能-----支持C#函数
  • ​​​​​​​GitLab 之 GitLab-Runner 安装,配置与问题汇总
  • # Apache SeaTunnel 究竟是什么?
  • (13)Latex:基于ΤΕΧ的自动排版系统——写论文必备
  • (HAL)STM32F103C6T8——软件模拟I2C驱动0.96寸OLED屏幕
  • (zt)最盛行的警世狂言(爆笑)
  • (八)Spring源码解析:Spring MVC
  • (第61天)多租户架构(CDB/PDB)
  • (附源码)spring boot基于小程序酒店疫情系统 毕业设计 091931
  • (学习日记)2024.03.12:UCOSIII第十四节:时基列表
  • (一)80c52学习之旅-起始篇
  • (转)我也是一只IT小小鸟
  • .babyk勒索病毒解析:恶意更新如何威胁您的数据安全
  • .net wcf memory gates checking failed
  • .net和php怎么连接,php和apache之间如何连接
  • .Net转Java自学之路—基础巩固篇十三(集合)
  • @TableLogic注解说明,以及对增删改查的影响
  • [@Controller]4 详解@ModelAttribute
  • [1204 寻找子串位置] 解题报告
  • [2019.3.5]BZOJ1934 [Shoi2007]Vote 善意的投票
  • [AI]文心一言出圈的同时,NLP处理下的ChatGPT-4.5最新资讯
  • [Android 13]Input系列--获取触摸窗口
  • [Android Studio] 开发Java 程序
  • [BPU部署教程] 教你搞定YOLOV5部署 (版本: 6.2)