(博主最近去研究深搜和广搜去了,鸽一会。)

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

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

输入格式

输入的第一行包含三个整数:M,N,T。代表 M 行 N 列的地图和鸣人初始的查克拉数量 T。

0 < M,N < 200,0≤T<10

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

输出格式

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

样例输入1

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

样例输出1

6

样例输入2

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

样例输出2

4

#include <iostream>
#include <string>
using namespace std;
string maze[220];
bool vis[220][220];
int n,m;
int ans=10000;
int flag=0;
int depth=1;
int dir[4][2]={{-1,0},{0,-1},{1,0},{0,1}};
bool in(int x,int y)
{return x>=0&&x<m&&y>=0&&y<n;
}
void dfs(int x,int y,int depth,int t)
{if(maze[x][y]=='+'){flag=1;                                   //能碰到佐助就把flag置位1if(depth<ans)                            //保证ans为最小ans{ans=depth;}return;}if(depth>ans)                                //剪去一部分情况{return ;}vis[x][y]=1;for(int i=0;i<4;i++){int tx=x+dir[i][0];int ty=y+dir[i][1];if(in(tx,ty)&&!vis[tx][ty])                              //如果(tx,ty)没有超界,且没有访问过{if(maze[tx][ty]=='#'&&t>0)                           //如果遇到大蛇丸手下,且还有查克拉{dfs(tx,ty,depth+1,t-1);                          //递归}if(maze[tx][ty]!='#')                                //如果没有遇到大蛇丸手下{dfs(tx,ty,depth+1,t);                            //递归}}}vis[x][y]=0;
}
int main()
{int t;cin>>m>>n>>t;int x,y;for(int i=0;i<m;i++){cin>>maze[i];}for(int i=0;i<m;i++){for(int j=0;j<n;j++){if(maze[i][j]=='@'){x=i;y=j;}}}dfs(x,y,0,t);if(flag==1){cout<<ans<<endl;}else{cout<<-1<<endl;}return 0;
}

鸣人和佐助(广度搜索)相关推荐

  1. 算法基础:4115:鸣人和佐助--广度优先搜索

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

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

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

  3. Bailian4115 鸣人和佐助【BFS】

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

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

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

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

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

  6. OpenJudge-021:鸣人和佐助

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

  7. NOI / 2.5基本算法之搜索-6044:鸣人和佐助详解

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

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

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

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

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

最新文章

  1. php写邮件空格_PHP 邮件漏洞小结
  2. 分享一下收到的微软CRM云分享计划 邮件
  3. 汇编语言之大小写转换问题
  4. python下各种包的安装
  5. Android BLE(3) ---FastBle解析
  6. 如何禁用Web表单字段/输入标签上的浏览器自动完成功能?
  7. boost线程指南手册
  8. python smtplib模块_python使用smtplib模块发送邮件
  9. 盛大剥离新业务:陈大年控股
  10. 【Android -- 写作工具】Markdown 前景色、背景色
  11. 基于C++(QT框架)设计的网络摄像头项目(支持跨平台运行)
  12. Linux Test Project(LTP项目)
  13. angular+bootstrap+spring boot实现分页
  14. 期货基本面分析:,马来西亚10月1-10日棕榈油出口量较上月同期下降17.3%,但对中国出口创一年新高
  15. Python基础刻意练习:字典与集合
  16. eCharts——柱状图中的柱体颜色渐变
  17. 计算机通信常用的纠错方式,纠错
  18. 计算机放音乐声音小在吗调,笔记本外放声音太小怎么办?-电脑教程
  19. 微软对联服务器关闭了吗,不只对联,现在微软还能自动生成绝句
  20. KITTI VOC COCO 在线国内下载/百度云

热门文章

  1. 2021-11-28 Misc 杂项略览 一 图片隐写1 直接隐写【T.O.CTF】
  2. 我协会负责人调研东风汽车·····
  3. web字体格式及几种在线格式转换工具介绍
  4. python if continue的用法_Python continue语句用法实例
  5. java控制台存钱方法_JAVA实现账户取款和存款操作
  6. UE4中Pak文件的读取规则
  7. 大数据----------------R语言下依赖库与依赖包的安装
  8. 2977 二叉堆练习1 codevs
  9. gwu计算机硕士排名,美国乔治华盛顿大学计算机专业排名 研究方向有哪些
  10. java 取消引用_java编译时所说的“无法取消引用”是什么意思