4115:鸣人和佐助
总时间限制: 1000ms 内存限制: 65536kB
描述
佐助被大蛇丸诱骗走了,鸣人在多少时间内能追上他呢?

已知一张地图(以二维矩阵的形式表示)以及佐助和鸣人的位置。地图上的每个位置都可以走到,只不过有些位置上有大蛇丸的手下,需要先打败大蛇丸的手下才能到这些位置。鸣人有一定数量的查克拉,每一个单位的查克拉可以打败一个大蛇丸的手下。假设鸣人可以往上下左右四个方向移动,每移动一个距离需要花费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

问题链接:Bailian4115 鸣人和佐助
问题简述:(略)
问题分析:用BFS来解决,不解释。
程序说明:(略)
参考链接:(略)
题记:(略)

AC的C++语言程序如下:

/* Bailian4115 鸣人和佐助 */#include <bits/stdc++.h>using namespace std;const int N = 200;
char maze[N][N + 1];
int Chakra[N][N];
struct Node {int row, col, k, time;Node(int r, int c, int k2, int t):row(r), col(c), k(k2), time(t){}
};
int dr[] = {-1, 1, 0, 0};
int dc[] = {0, 0, -1, 1};
const int DL = sizeof(dr) / sizeof(int);int main()
{int m, n, k;while(~scanf("%d%d%d", &m, &n, &k)) {queue<Node> q;for(int i = 0; i < m; i++)scanf("%s", maze[i]);memset(Chakra, -1, sizeof(Chakra));int tr, tc, cnt = 0;for(int i = 0; i < m; i++)for(int j = 0; j < n; j++)if(maze[i][j] == '@') {Chakra[i][j] = k;q.push(Node(i, j, k, 0));if(++cnt == 2) break;} else if(maze[i][j] == '+') {tr = i;tc = j;if(++cnt == 2) break;}while(!q.empty()) {Node t = q.front();if(t.row == tr && t.col == tc) break;q.pop();for(int i = 0; i < DL; i++) {int nrow = t.row + dr[i];int ncol = t.col + dc[i];if(nrow < 0 || nrow >= m || ncol < 0 || ncol >= n)continue;if(t.k <= Chakra[nrow][ncol])continue;if(maze[nrow][ncol] == '#') {if(t.k > 0) {Chakra[nrow][ncol] = t.k - 1;q.push(Node(nrow, ncol, t.k - 1, t.time + 1));}} else {Chakra[nrow][ncol] = t.k;q.push(Node(nrow, ncol, t.k, t.time + 1));}}}if(q.empty())printf("-1\n");elseprintf("%d\n", q.front().time);}return 0;
}

Bailian4115 鸣人和佐助【BFS】相关推荐

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

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

  2. 计蒜客 鸣人和佐助 bfs

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

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

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

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

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

  5. OpenJudge-021:鸣人和佐助

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

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

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

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

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

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

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

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

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

最新文章

  1. JAVA try...catch...finally中的执行顺序和return语句
  2. UOJ.386.[UNR #3]鸽子固定器(贪心 链表)
  3. HttpWebResponse远程服务器返回错误: (500) 内部服务器错误。
  4. iOS开发事件分发机制—响应链—手势影响
  5. 自定义ViewGroup实现仿微信图片选择器
  6. “.NET研究”【Android开发教程】一、基础概念
  7. 北京房租到底有多高? | 爬取北京海淀区一居室租房信息
  8. servlet 和 struts2 同时使用 以及 使用struts2标签库时报错
  9. HP LasterJet 3050驱动安装技巧,面向win7,8,8.1,10
  10. Pytorch中的错误和bug
  11. 学习笔记#工作日志使用
  12. 下载百度地图瓦片和获取瓦片经纬度
  13. 遥感信息分析与应用期末复习题
  14. 02、RS485 通信与 Modbus 协议
  15. 计算机基础知识教案总结,计算机基础学习心得体会范文
  16. 顺丰同城快递预下单接口
  17. Python小程序之超市买水果
  18. Power bi 4.14 桑基图
  19. 哪种耳机适合跑步用、跑步运动耳机推荐
  20. 择偶标准与黑名单了解一下

热门文章

  1. 单元测试工具cmocka英文教程,非常漂亮
  2. html页面div高度相减,关于html:两个div底部div到高度调整与浏览器窗口
  3. 地图小部件—ArcGIS API for JavaScript
  4. [转]详解Flex布局(语法+教程)
  5. WebKit新特性WebGL
  6. 快速创建精彩的Flash游戏(一) Flash2D游戏引擎简介
  7. node mysql 查询_Node.js使用mysql进行查询详解
  8. 【数据结构的魅力】004.堆、前缀树、桶排序、排序算法总结
  9. Spark Streaming保存到HDFS目录中案例
  10. Doris FE配置参数(全面)