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

已知一张地图(以二维矩阵的形式表示)以及佐助和鸣人的位置。地图上的每个位置都可以走到,只不过有些位置上有大蛇丸的手下,需要先打败大蛇丸的手下才能到这些位置。鸣人有一定数量的查克拉,每一个单位的查克拉可以打败一个大蛇丸的手下。假设鸣人可以往上下左右四个方向移动,每移动一个距离需要花费1个单位时间,打败大蛇丸的手下不需要时间。如果鸣人查克拉消耗完了,则只可以走到没有大蛇丸手下的位置,不可以再移动到有大蛇丸手下的位置。佐助在此期间不移动,大蛇丸的手下也不移动。请问,鸣人要追上佐助最少需要花费多少时间?
输入
输入的第一行包含三个整数:M,N,T。代表M行N列的地图和鸣人初始的查克拉数量T。0 < M,N < 200,0 ≤ T < 10
后面是M行N列的地图,其中@代表鸣人,+代表佐助。*代表通路,#代表大蛇丸的手下。
输出
输出包含一个整数R,代表鸣人追上佐助最少需要花费的时间。如果鸣人无法追上佐助,则输出-1。
样例输入
样例输入1
4 4 1
#@##
**##
###+


样例输入2
4 4 2
#@##
**##
###+


样例输出
样例输出1
6

样例输出2
4

#include <iostream>
#include <queue>
#include <cstring>
using namespace std;
char place[205][205];
int visited[205][205][15];
struct Node{int x,y,chark,t;//构造函数 进行初始化 Node(int xx,int yy,int charkk,int tt):x(xx),y(yy),chark(charkk),t(tt){}
};
queue<Node> q;
int main()
{int M,N,T;cin>>M>>N>>T;memset(visited,0,sizeof(visited));for(int i=0;i<M;i++){for(int j=0;j<N;j++){cin>>place[i][j];if(place[i][j]=='@'){//存放首结点 q.push(Node(i,j,T,0));visited[i][j][T]=1;}}}int p[4][2]={{1,0},{-1,0},{0,1},{0,-1}};int x,y,chark,t;while(!q.empty()){Node s=q.front();for(int i=0;i<4;i++){//每次走不同方向 x=s.x+p[i][0];y=s.y+p[i][1];chark=s.chark;t=s.t+1;//不满足条件则进行下次循环 if(x<0||x>=M||y>=N||y<0||visited[x][y][chark]==1)continue;if(place[x][y]=='#'){if(chark>0){chark--;}else continue;}visited[x][y][chark]=1;q.push(Node(x,y,chark,t));if(place[x][y]=='+'){cout<<t<<endl;return 0;}}q.pop();}cout<<"-1"<<endl;return 0;
}

主要思想: 广度优先搜索算法。
注意点:
1.关于是否走过的问题,要用三维数组 因为加上了查克拉的数量。比如走到相同的位置可能查克拉数量不一样,这也算不同的走法。

算法基础:4115:鸣人和佐助--广度优先搜索相关推荐

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

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

  2. 百练4115 鸣人和佐助(变式BFS)

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

  3. 6044:4115:鸣人和佐助

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

  4. Bailian4115 鸣人和佐助【BFS】

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

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

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

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

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

  7. OpenJudge-021:鸣人和佐助

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

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

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

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

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

最新文章

  1. 机器学习神器Scikit-Learn保姆教程!
  2. python pymysql实例_python笔记-mysql命令使用示例(使用pymysql执行)
  3. asp多重查询的解决方案
  4. SQL SERVER 2000安装遇到的问题小汇总(转载)
  5. asp连接mysql视频_asp连接mysql数据库详细实现代码
  6. git push出错 remote: Hook Error: request authorize server: curl error: Couldn't resolve host name
  7. [译] Airbnb 在 React Native 上下的赌注(一):概述
  8. arduino 光控灯_Arduino光控开关
  9. ssh协议是osi_计算机网络协议分析
  10. 解决方案-vector初始化后存放Mat,出现Mat矩阵数据同变问题
  11. Python标准库——走马观花
  12. 用c语言判断计算机是大端模式还是小端模式
  13. cad里面f命令用不了_南方CASS软件里CAD命令不能使用怎么办
  14. sklearn中的数据预处理和特征工程
  15. opencv实现眼动检测【胡子哥哥】
  16. Oracle锁机制深度分析
  17. XtraReport打印二维码
  18. 战神笔记本电脑自带access吗_战神GX9系列超享windows10搭载微软office2016
  19. php如何做防抖,别抖,OK? 操作系统抖动现象、网络抖动与延迟、函数抖动之防抖与节流,串讲...
  20. 周志明架构课--03.SOA时代:成功理论与失败实践

热门文章

  1. 宝塔Linux面板安装SSL证书
  2. 世界的尽头是铁岭,互联网的尽头是它
  3. 【CSDN】01-文章编辑方式
  4. 2018.10.9模拟赛
  5. element plus 表格合计
  6. C++ QT开发人机象棋(评估函数)
  7. 剑指offer题目详细版本
  8. 软件开发版本 Alpha、Beta、RC、GA
  9. chaos engineering读书笔记
  10. 区域卫生平台用户分析