佐助被大蛇丸诱骗走了,鸣人在多少时间内能追上他呢?

已知一张地图(以二维矩阵的形式表示)以及佐助和鸣人的位置。地图上的每个位置都可以走到,只不过有些位置上有大蛇丸的手下,需要先打败大蛇丸的手下才能到这些位置。鸣人有一定数量的查克拉,每一个单位的查克拉可以打败一个大蛇丸的手下。假设鸣人可以往上下左右四个方向移动,每移动一个距离需要花费 11 个单位时间,打败大蛇丸的手下不需要时间。如果鸣人查克拉消耗完了,则只可以走到没有大蛇丸手下的位置,不可以再移动到有大蛇丸手下的位置。佐助在此期间不移动,大蛇丸的手下也不移动。请问,鸣人要追上佐助最少需要花费多少时间?

输入格式

输入的第一行包含三个整数:MM,NN,TT。代表 MM 行 NN 列的地图和鸣人初始的查克拉数量 TT。0 < M,N < 2000<M,N<200,0 \le T < 100≤T<10

后面是 MM 行 NN 列的地图,其中 @ 代表鸣人,+ 代表佐助。* 代表通路,# 代表大蛇丸的手下。

输出格式

输出包含一个整数 RR,代表鸣人追上佐助最少需要花费的时间。如果鸣人无法追上佐助,则输出 -1。

Sample Input

4 4 1
#@##
**##
###+
****

Sample Output

6

Sample Input 2

4 4 2
#@##
**##
###+
****

Sample Output 2

4

bfs本质上就是暴力,一个一个试答案,就好比在一张迷宫地图上试,如果不行就打叉,去尝试下一个可能的答案,这个过程是沿着墙走的不会说是破墙走吧,这一题就可以形象的理解为我有几次机会破墙,破墙走出迷宫的意思,但是之前的二维数组的意思是我走过这条路以后就不会走了,然后用二维数组储存来过,但是如果用破墙的方法的话,可能就会走到重复的路了,想想一下你在打游戏,每次都会记录复活地方,你在这个时候要是还按照二维数组储存的话,是不是脚下的路,已经被标记过了,那你肯定走不出来,所以要每次破墙以后重新来标记一个维度来表示新的路径,如果不标记,就直接返回-1,表无路可走了,这是本题的难点,所以重点说一下 (三维数组)

下面是详细的代码

#include<iostream>
#include<queue>
using namespace std;
char map[202][202];
bool vis[202][202][15];
int x,y,mx,my;
int m,n,t;//m行n列t查克拉
struct pos
{int x,y;//当前位置int s;//路程所需时间int p;//当前还有多少能量
} cur,nex;
queue <pos> q;
bool in(int x ,int y )
{return 0<=x&&x<m && 0<=y&&y<n;
}int dir[4][2]={{1,0},{-1,0},{0,-1},{0,1}};
int bfs (int x ,int y ,int p)
{vis[x][y][p]=1;cur.p=p;cur.x=x;cur.y=y;cur.s=0;q.push(cur);while(q.size()){cur=q.front();q.pop();for(int i=0;i<4;i++){int dx=cur.x+dir[i][0];int dy=cur.y+dir[i][1];if(dx==mx && dy==my )return cur.s+1;if(in(dx,dy)){if(map[dx][dy]=='*'&& !vis[dx][dy][cur.p]){nex.x=dx,nex.y=dy,nex.s=cur.s+1;nex.p=cur.p;q.push(nex);vis[dx][dy][cur.p]=1;}if(map[dx][dy]=='#'&&!vis[dx][dy][cur.p-1]&&cur.p>0){nex.x=dx,nex.y=dy,nex.s=cur.s+1;nex.p=cur.p-1;q.push(nex);vis[dx][dy][cur.p-1]=1;}}}}return -1;
}int main()
{cin>>m>>n>>t;for(int i=0;i<m;i++)for(int j=0;j<n;j++){cin>>map[i][j];if(map[i][j]=='@'){x=i;y=j;}if(map[i][j]=='+'){mx=i;my=j;}}cout<<bfs(x,y,t);return 0;}

鸣人和佐助———三维数组标记踪迹,形象理解记忆相关推荐

  1. O - 鸣人和佐助(BFS)

    O - 鸣人和佐助 题目 佐助被大蛇丸诱骗走了,鸣人在多少时间内能追上他呢? 已知一张地图(以二维矩阵的形式表示)以及佐助和鸣人的位置.地图上的每个位置都可以走到,只不过有些位置上有大蛇丸的手下,需要 ...

  2. OpenJudge-021:鸣人和佐助

    OpenJudge-021:鸣人和佐助 题目描述: 题目传送门:添加链接描述 已知一张地图(以二维矩阵的形式表示)以及佐助和鸣人的位置.地图上的每个位置都可以走到,只不过有些位置上有大蛇丸的手下,需要 ...

  3. 第9周测验-鸣人和佐助

    021:鸣人和佐助 1. 题目详情 描述 输入 输出 样例输入 样例输出 2.思路分析 2.1 整体思路 2.2 限制条件处理 2.3 剪枝 3.注意点 4.AC代码 5.总结 1. 题目详情 描述 ...

  4. OpenJ_Bailian——4115鸣人和佐助(带状态的A*)

    鸣人和佐助 Time Limit: 1000MS Memory Limit: 65536KB 64bit IO Format: %I64d & %I64u Submit Status Desc ...

  5. Bailian4115 鸣人和佐助【BFS】

    4115:鸣人和佐助 总时间限制: 1000ms 内存限制: 65536kB 描述 佐助被大蛇丸诱骗走了,鸣人在多少时间内能追上他呢? 已知一张地图(以二维矩阵的形式表示)以及佐助和鸣人的位置.地图上 ...

  6. 鸣人和佐助 计蒜客--1214 广搜 三维数组

    题目链接 题目: 佐助被大蛇丸诱骗走了,鸣人在多少时间内能追上他呢? 已知一张地图(以二维矩阵的形式表示)以及佐助和鸣人的位置.地图上的每个位置都可以走到,只不过有些位置上有大蛇丸的手下,需要先打败大 ...

  7. T1214 鸣人和佐助——dfs、bfs

    佐助被大蛇丸诱骗走了,鸣人在多少时间内能追上他呢? 分析 bfs 迷宫问题,求最短时间,和 拯救行动 差不多,存在打怪兽可以通过的另外条件:但是此题打怪兽不需要另耗时间,所以第一次找到的终点就是最短时 ...

  8. 计蒜客题解——T1214:鸣人和佐助

    题目相关 题目链接 计蒜客 OJ,https://nanti.jisuanke.com/t/T1214. 题目描述 已知一张地图(以二维矩阵的形式表示)以及佐助和鸣人的位置.地图上的每个位置都可以走到 ...

  9. 鸣人和佐助(记忆化广搜)

    我是传送门 已知一张地图(以二维矩阵的形式表示)以及佐助和鸣人的位置.地图上的每个位置都可以走到,只不过有些位置上有大蛇丸的手下,需要先打败大蛇丸的手下才能到这些位置.鸣人有一定数量的查克拉,每一个单 ...

最新文章

  1. 骑士卡:基于Kafka搭建消息中心,上亿消息推送轻松完成
  2. CString、std::string格式化字符串
  3. mapinfo制作地图_Mapinfo操作不太会?看这篇就够了
  4. HTML+CSS+JS实现 ❤️翻页倒计时ui特效❤️
  5. 搭建Dubbo开发学习环境——补充新版本的Dubbo-Admin的编译和执行过程
  6. SQL恢复挂起的原因和措施解析
  7. JVisualVM的使用实录
  8. html设置ie9兼容性视图,ie9兼容性视图设置方法
  9. killer queen ctf
  10. 海盗湾(The Pirate Bay)的战争——每一名技术人员都应该思考的问题
  11. Jmeter录制脚本,HTTP代理服务器介绍使用
  12. HC3i论坛医疗信息化热门资源100个
  13. GM7150,振芯科技,视频解码器,CVBS转BT656/601,QFN32,替换TVP5150/CJC5150
  14. 【温故知新】—— React/Redux/React-router4基础知识独立团Demo
  15. 最新阿里巴巴面试题合集附带答案,答对70%你也可以进阿里(天猫+蚂蚁金服+阿里巴巴)
  16. 单个Java文件打成可执行JAR包
  17. windows下mysql免安装配置
  18. 屏蔽 Alt+F4 和 Escape 键
  19. 10个高质量的简历制作网站推荐
  20. 阿里妈妈广告商品点击数据分析

热门文章

  1. java开发电脑配置_新电脑java开发环境配置(自用)
  2. 对方波信号进行傅里叶级数展开,利用matlab绘制展开后的波形
  3. python做人工智能对话_如何用Python制作聊天机器人?
  4. 未来科学技十幻想画计算机,如何指导学生画科幻画
  5. 未来科学技十幻想画计算机,未来世界科幻画图片 你憧憬过这样的未来吗
  6. 白话中台战略2:中台到底长啥样?
  7. 基于Eclipse+Java+Swing+Mysql实现酒店管理系统
  8. Jenkins-Pipline
  9. free -m 详解
  10. Day82_ELK(一)