沼跃鱼早已看穿了一切

Time Limit: 1 Sec  Memory Limit: 128 MB
Submit: 593  Solved: 229
[Submit][Status][Web Board]

Description

沼跃鱼打开密码门后发现门后是一个像迷宫一样的房间,墙上的指示牌写着:房间内某处有一宝箱,但是宝箱被上锁了,钥匙在这个房间的某个角落。沼泽鱼对宝箱里有什么很感兴趣,但它必须先去拿到钥匙才可以打开宝箱。然而沼跃鱼早已看穿了一切,它看清了这个房间的布局,现在给出房间的布局图,问沼跃鱼拿到钥匙并打开宝箱最少需要走多少步。沼跃鱼每次只能向上、下、左、右中其中一个方向走一步,但若那个位置是墙时则不能往那个位置走(显然,沼跃鱼不能穿墙)。

Input

输入的第一行是一个整数T(0<T<20),代表接下来有T组数据。

每组数据的第一行有两个整数n,m(0<n,m≤10),n代表房间的宽度,m代表房间的长度。

接下来n行,每行有m个字符,‘S’表示开始时沼跃鱼所处的位置,‘#’代表墙,‘*’代表空地,‘K’代表钥匙,‘B’表示宝箱。钥匙只有一把。

详情参看样例输入。

Output

对于每组数据,输出一行包含一个整数x,x代表沼跃鱼拿到钥匙并打开宝箱所需的最少步数。若沼跃鱼不能够拿到钥匙并打开宝箱(即到达不了钥匙或宝箱所在处)则输出-1。

Sample Input

1
5 6
***#B#
S**#*#
##***#
K#*#*#
***#*#

Sample Output

17

HINT

对于样例数据,房间宽5个单位,长6个单位。

从S出发到K需要的最少步数为8,而从K出发到B所需的最少步数为9.

所以答案为8 + 9 = 17.

请使用scanf("%s", s);或cin>> s;来读取字符串以避免出现漏读多读的情况。

BFS 广度优先搜索

CODE :

  1. #include<iostream>
  2. #include<cstring>
  3. #include<cstdio>
  4. using namespace std;
  5. int b[][];
  6. void bfs(int n,int m,int num)
  7. {
  8. for(int i=;i<=n;i++)
  9. {
  10. for(int j=;j<=m;j++)
  11. {
  12. if(b[i][j]==num)
  13. {
  14. if(b[i][j+]==)
  15. {
  16. b[i][j+]=num+;
  17. }
  18. if(b[i][j-]==){
  19. b[i][j-]=num+;
  20. }
  21. if(b[i-][j]==){
  22. b[i-][j]=num+;
  23. }
  24. if(b[i+][j]==){
  25. b[i+][j]=num+;
  26. }
  27. }
  28. }
  29. }
  30. }
  31. int main()
  32. {
  33. int N;
  34. cin>>N;
  35. while(N--)
  36. {
  37. char a[][];
  38. int n,m;
  39. cin>>n>>m;
  40. memset(b,-,sizeof(b));
  41. int x0,y0,x1,y1;
  42. for(int i=;i<=n;i++)
  43. {
  44. for(int j=;j<=m;j++)
  45. {
  46. cin>>a[i][j];
  47. if(a[i][j]!='#')
  48. {
  49. b[i][j]=;
  50. }
  51. if(a[i][j]=='S')
  52. {
  53. b[i][j]=;
  54. }
  55. if(a[i][j]=='K')
  56. {
  57. x0=i;
  58. y0=j;
  59. }
  60.  
  61. }
  62. }
  63. int num=;
  64. while(b[x0][y0]==&&num<)
  65. {
  66. bfs(n,m,num);
  67. num++;
  68. /*for(int i=1;i<=n;i++)
  69. {
  70. for (int j=1;j<=m;j++)
  71. {
  72. cout<<b[i][j]<<'\t';
  73. }
  74. cout<<endl;
  75. }
  76. cout<<endl;*/
  77. }
  78. if(num>)
  79. {
  80. cout<<"-1"<<endl;
  81. continue;
  82. }
  83. for(int i=;i<=n;i++)
  84. {
  85. for(int j=;j<=m;j++)
  86. {
  87. if(a[i][j]!='#')
  88. {
  89. b[i][j]=;
  90. }
  91. if(a[i][j]=='K')
  92. {
  93. b[i][j]=;
  94. }
  95. if(a[i][j]=='B')
  96. {
  97. x0=i;
  98. y0=j;
  99. }
  100. }
  101. }
  102. /* for(int i=1;i<=n;i++)
  103. {
  104. for (int j=1;j<=m;j++)
  105. {
  106. cout<<b[i][j]<<'\t';
  107. }
  108. cout<<endl;
  109. }*/
  110. int num0=;
  111. while(b[x0][y0]==&&num0<)
  112. {
  113. bfs(n,m,num0);
  114. num0++;
  115. ///*for(int i=1;i<=n;i++)
  116. //{
  117. // for (int j=1;j<=m;j++)
  118. // {
  119. // cout<<b[i][j]<<'\t';
  120. // }
  121. // cout<<endl;
  122. //}*/
  123. //cout<<endl;
  124. }
  125. if(num0>)
  126. {
  127. cout<<"-1"<<endl;
  128. continue;
  129. }
  130. cout<<num+num0-<<endl;
  131. }
  132. }

沼跃鱼早已看穿了一切 C/C++的更多相关文章

  1. hihoCoder #1082 : 然而沼跃鱼早就看穿了一切(字符串处理)

    #1082 : 然而沼跃鱼早就看穿了一切 时间限制:1000ms 单点时限:1000ms 内存限制:256MB 描述 fjxmlhx每天都在被沼跃鱼刷屏,因此他急切的找到了你希望你写一个程序屏蔽所有句 ...

  2. hihoCoder - 1082 - 然而沼跃鱼早就看穿了一切 (字符串处理!!)

    #1082 : 然而沼跃鱼早就看穿了一切 时间限制:1000ms 单点时限:1000ms 内存限制:256MB 描写叙述 fjxmlhx每天都在被沼跃鱼刷屏,因此他急切的找到了你希望你写一个程序屏蔽全 ...

  3. hihocoder 1082 然而沼跃鱼早就看穿了一切 (替换指定的串 )

    #1082 : 然而沼跃鱼早就看穿了一切 时间限制:1000ms 单点时限:1000ms 内存限制:256MB 描述 fjxmlhx每天都在被沼跃鱼刷屏,因此他急切的找到了你希望你写一个程序屏蔽所有句 ...

  4. hihocoder 1082 然而沼跃鱼早就看穿了一切(字符串替换)

    时间限制:1000ms 单点时限:1000ms 内存限制:256MB 描述 fjxmlhx每天都在被沼跃鱼刷屏,因此他急切的找到了你希望你写一个程序屏蔽所有句子中的沼跃鱼(“marshtomp”,不区 ...

  5. 【面试笔试算法】Problem 8: 然而沼跃鱼早就看穿了一切(hiho题库)

    时间限制:1000ms 单点时限:1000ms 内存限制:256MB 描述 fjxmlhx每天都在被沼跃鱼刷屏,因此他急切的找到了你希望你写一个程序屏蔽所有句子中的沼跃鱼("marshtom ...

  6. Hihocoder #1082 : 然而沼跃鱼早就看穿了一切 暴力

    时间限制:1000ms 单点时限:1000ms 内存限制:256MB 描述 fjxmlhx每天都在被沼跃鱼刷屏,因此他急切的找到了你希望你写一个程序屏蔽所有句子中的沼跃鱼(“marshtomp”,不区 ...

  7. hihocoder:#1082 : 然而沼跃鱼早就看穿了一切(用string)

    题目是这样的: 描述 fjxmlhx每天都在被沼跃鱼刷屏,因此他急切的找到了你希望你写一个程序屏蔽所有句子中的沼跃鱼("marshtomp",不区分大小写).为了使句子不缺少成分, ...

  8. 【hihoCoder】1082: 然而沼跃鱼早就看穿了一切

      题目:http://hihocoder.com/problemset/problem/1082 输入一个字符串,将其中特定的单词替换成另一个单词   代码注意点: 1. getline(istre ...

  9. hihoCoder 1082然而沼跃鱼早就看穿了一切 (字符串处理)

    http://hihocoder.com/problemset/problem/1082 首先将字符串全部字母变成小写,不断用find查找字符串中的Marshtomp,并把每个字符变为’#‘ ,最后统 ...

随机推荐

  1. Masonry的一些使用。

    除了等距的有问题(懒得改了),其他用过挺正常的,我自己也是刚使用,有问题还请海涵. 地址:http://pan.baidu.com/s/1boyxu8Z

  2. J2EE项目开发流程简介

    开发流程(一) 提出需求:产品部提出本周期项目的具体需求. 项目计划:项目经理协调开发部.测试部和产品部进行需求协商,产生项目计划. 需求理解:开发部和测试部向产品部提出各自对需求的理解. 产品设计: ...

  3. android设置图片变化的四种效果代码

    activity代码如下: package com.example.chapter12_graphic_animation; import android.os.Bundle; import andr ...

  4. sql 列设置默认值,语法查询知识点积累

    一.修改字段默认值 alter table 表名 drop constraint 约束名字   ------说明:删除表的字段的原有约束 alter table 表名 add constraint 约 ...

  5. 海量数据面试题----分而治之/hash映射 + hash统计 + 堆/快速/归并排序

    1.从set/map谈到hashtable/hash_map/hash_set 稍后本文第二部分中将多次提到hash_map/hash_set,下面稍稍介绍下这些容器,以作为基础准备.一般来说,STL ...

  6. 关于STM32工程的错误,狗血错误。。。..\CMSIS\core_cm3.h(1087): error: #20: identifier "IRQn_Type" is undefined

    这件事还是要写一篇博客了,为了后来的人不换致命性的错误 辛辛苦苦写的一个四个不同的引脚不同时钟不同寄存器分别产生四种不同占空比不同周期的信号方波程序超级经典  PS:页尾上传PWM波形产生工程附件供大 ...

  7. Javascript 文件的同步加载与异步加载

    HTML 4.01 的script属性 charset: 可选.指定src引入代码的字符集,大多数浏览器忽略该值.defer: boolean, 可选.延迟脚本执行,相当于将script标签放入页面b ...

  8. jQuery之Jcrop

    头像裁剪是一个经常用到的功能,实现原理也较为简单,就是在本地选择好所需裁剪图片的坐标,将坐标发送到服务器,由服务器执行图片裁剪操作. jQuery插件Jcrop提供了强大的图片裁剪坐标选择插件.一下来 ...

  9. git与svn的使用比较

    先说下基础知识: git是本地会(维护)有个版本仓库. svn本地也会维护一个自己的信息(一般是目录结构和文件状态的信息),这里的文件状态一般是指:文件是已删除,还是已添加,还是被修改等等.一般是会有 ...

  10. 是否需要手动执行DataContext的Dispose方法?

    我们知道DataContext实现了IDisposable接口.在C#中,凡是实现了IDisposable接口的类,都推荐的使用using语句.如下: using (DataContext db = ...