沼跃鱼早已看穿了一切

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 :

#include<iostream>
#include<cstring>
#include<cstdio>
using namespace std;
int b[][];
void bfs(int n,int m,int num)
{
for(int i=;i<=n;i++)
{
for(int j=;j<=m;j++)
{
if(b[i][j]==num)
{
if(b[i][j+]==)
{
b[i][j+]=num+;
}
if(b[i][j-]==){
b[i][j-]=num+;
}
if(b[i-][j]==){
b[i-][j]=num+;
}
if(b[i+][j]==){
b[i+][j]=num+;
}
}
}
}
}
int main()
{
int N;
cin>>N;
while(N--)
{
char a[][];
int n,m;
cin>>n>>m;
memset(b,-,sizeof(b));
int x0,y0,x1,y1;
for(int i=;i<=n;i++)
{
for(int j=;j<=m;j++)
{
cin>>a[i][j];
if(a[i][j]!='#')
{
b[i][j]=;
}
if(a[i][j]=='S')
{
b[i][j]=;
}
if(a[i][j]=='K')
{
x0=i;
y0=j;
} }
}
int num=;
while(b[x0][y0]==&&num<)
{
bfs(n,m,num);
num++;
/*for(int i=1;i<=n;i++)
{
for (int j=1;j<=m;j++)
{
cout<<b[i][j]<<'\t';
}
cout<<endl;
}
cout<<endl;*/
}
if(num>)
{
cout<<"-1"<<endl;
continue;
}
for(int i=;i<=n;i++)
{
for(int j=;j<=m;j++)
{
if(a[i][j]!='#')
{
b[i][j]=;
}
if(a[i][j]=='K')
{
b[i][j]=;
}
if(a[i][j]=='B')
{
x0=i;
y0=j;
}
}
}
/* for(int i=1;i<=n;i++)
{
for (int j=1;j<=m;j++)
{
cout<<b[i][j]<<'\t';
}
cout<<endl;
}*/
int num0=;
while(b[x0][y0]==&&num0<)
{
bfs(n,m,num0);
num0++;
///*for(int i=1;i<=n;i++)
//{
// for (int j=1;j<=m;j++)
// {
// cout<<b[i][j]<<'\t';
// }
// cout<<endl;
//}*/
//cout<<endl;
}
if(num0>)
{
cout<<"-1"<<endl;
continue;
}
cout<<num+num0-<<endl;
}
}

沼跃鱼早已看穿了一切 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. MYSQL数据去重与外表填充

    经常要对数据库中的数据进行去重,有时还需要使用外部表填冲数据,本文档记录数据去重与外表填充数据. date:2016/8/17 author:wangxl 1 需求 对user_info1表去重,并添 ...

  2. (转)ubuntu 文件目录结构

    文件系统的类型 LINUX有四种基本文件系统类型:普通文件.目录文件.连接文件和特殊文件,可用file命令来识别. 1. 普通文件:如文本文件.C语言元代码.SHELL脚本.二进制的可执行文件等,可用 ...

  3. codeforces 335A Banana(贪心)

    转载请注明出处: http://www.cnblogs.com/fraud/          ——by fraud    Banana Piegirl is buying stickers for ...

  4. CSS3前缀

    我们经常会遇到写的有些css3属性会在不同的浏览器下呈现不兼容的情况,那是因为浏览器内核不同而导致的兼容性问题. 首先我们需要先了解一下目前的几种现代浏览器的内核,主流内容主要有Mozilla(熟悉的 ...

  5. 十进制二进制之间的转化 PHP算法

    [ 十进制转二进制 ] function test($var){ $func = function($i){ if($i < 2){ return $i; } $return['int'] = ...

  6. Mysql MEMORY 引擎

    CREATE TABLE `m` ( `) unsigned NOT NULL AUTO_INCREMENT, `name` ) NOT NULL, `ctime` ) NOT NULL, `ltim ...

  7. python笔记之ZipFile模块

    python笔记之ZipFile模块 zipfile模块用来做zip格式编码的压缩和解压缩的,zipfile里有两个非常重要的class, 分别是ZipFile和ZipInfo, 在绝大多数的情况下, ...

  8. postgresql创建用户

    (1)内部命令create user 用户名 with superuser password '密码';              先进入数据库后用命令\h create user 查看帮助     ...

  9. js 属性类型

    1.访问器属性 var book = { _year: 2004, edition: 1 }; Object.defineProperty(book, "year", { get: ...

  10. EXW_FOB_CIF_CFR 外贸报价方式&条款之间的区别与联系

    一.工厂交货价(EXW=Ex Works): 交货地点:出口国工厂或仓库:  运 输:买方负责:  保 险:买方负责:  出口手续:买方负责:  进口手续:买方负责:  风险转移:交货地:  所有权转 ...