沼跃鱼早已看穿了一切 C/C++
沼跃鱼早已看穿了一切
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
Sample Output
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++的更多相关文章
- hihoCoder #1082 : 然而沼跃鱼早就看穿了一切(字符串处理)
#1082 : 然而沼跃鱼早就看穿了一切 时间限制:1000ms 单点时限:1000ms 内存限制:256MB 描述 fjxmlhx每天都在被沼跃鱼刷屏,因此他急切的找到了你希望你写一个程序屏蔽所有句 ...
- hihoCoder - 1082 - 然而沼跃鱼早就看穿了一切 (字符串处理!!)
#1082 : 然而沼跃鱼早就看穿了一切 时间限制:1000ms 单点时限:1000ms 内存限制:256MB 描写叙述 fjxmlhx每天都在被沼跃鱼刷屏,因此他急切的找到了你希望你写一个程序屏蔽全 ...
- hihocoder 1082 然而沼跃鱼早就看穿了一切 (替换指定的串 )
#1082 : 然而沼跃鱼早就看穿了一切 时间限制:1000ms 单点时限:1000ms 内存限制:256MB 描述 fjxmlhx每天都在被沼跃鱼刷屏,因此他急切的找到了你希望你写一个程序屏蔽所有句 ...
- hihocoder 1082 然而沼跃鱼早就看穿了一切(字符串替换)
时间限制:1000ms 单点时限:1000ms 内存限制:256MB 描述 fjxmlhx每天都在被沼跃鱼刷屏,因此他急切的找到了你希望你写一个程序屏蔽所有句子中的沼跃鱼(“marshtomp”,不区 ...
- 【面试笔试算法】Problem 8: 然而沼跃鱼早就看穿了一切(hiho题库)
时间限制:1000ms 单点时限:1000ms 内存限制:256MB 描述 fjxmlhx每天都在被沼跃鱼刷屏,因此他急切的找到了你希望你写一个程序屏蔽所有句子中的沼跃鱼("marshtom ...
- Hihocoder #1082 : 然而沼跃鱼早就看穿了一切 暴力
时间限制:1000ms 单点时限:1000ms 内存限制:256MB 描述 fjxmlhx每天都在被沼跃鱼刷屏,因此他急切的找到了你希望你写一个程序屏蔽所有句子中的沼跃鱼(“marshtomp”,不区 ...
- hihocoder:#1082 : 然而沼跃鱼早就看穿了一切(用string)
题目是这样的: 描述 fjxmlhx每天都在被沼跃鱼刷屏,因此他急切的找到了你希望你写一个程序屏蔽所有句子中的沼跃鱼("marshtomp",不区分大小写).为了使句子不缺少成分, ...
- 【hihoCoder】1082: 然而沼跃鱼早就看穿了一切
题目:http://hihocoder.com/problemset/problem/1082 输入一个字符串,将其中特定的单词替换成另一个单词 代码注意点: 1. getline(istre ...
- hihoCoder 1082然而沼跃鱼早就看穿了一切 (字符串处理)
http://hihocoder.com/problemset/problem/1082 首先将字符串全部字母变成小写,不断用find查找字符串中的Marshtomp,并把每个字符变为’#‘ ,最后统 ...
随机推荐
- Sigmoid function in NN
X = [ones(m, ) X]; temp = X * Theta1'; t = size(temp, ); temp = [ones(t, ) temp]; h = temp * Theta2' ...
- php常用mysql函数
mysql_affected_rows: 得到 MySQL 最后操作影响的列数目. mysql_close: 关闭 MySQL 伺服器连线. mysql_connect: 开启 MySQL 伺服器连线 ...
- ThinkPhp调用webservice
模板页: <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <titl ...
- shell脚本分类
shell脚本分为三类:登录脚本.交互式脚本.非交互式脚本 一. 登录脚本类似于windows下的计算机设置中的登录脚本和账户设置下的登录脚本的合集(我是这么理解的哈). 其配置文件的关键词为pref ...
- requirejs学习之-- 初始化(一)
为了规范在项目中使用的javascript代码,我们使用了requirejs框架. 初始阶段,我们在按钮的点击事件中调用创建的模块,代码如下: function button_click() { _t ...
- Hopscotch(POJ 3050 DFS)
Hopscotch Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 2845 Accepted: 1995 Descrip ...
- VS2005快捷键
VS2005快捷键 CTRL + SHIFT + B生成解决方案 CTRL + F7 生成编译 CTRL + O 打开文件 CTRL + SHIFT + O打开项目 CTRL + SHIFT + C显 ...
- 结构体的sizeof
首先有几条规则: 1. 结构体的成员相对于结构体的偏移量,是该成员所包含的最大简单类型(指占用内存数)的整数倍(如果该成员本身又是一个结构体,就要递归查找其简单类型,简单类型就是char short ...
- nginx+vaadin配置
nginx+Vaadin的特殊性在于配置WEBSOCKET或LONG_POLLING.网上资料不多,自己多次尝试配置都不成功,后来终于找到这篇说明才得以配置成功,使用效果不错,介绍如下. 1./etc ...
- Pascal's Triangle II 解答
Question Given an index k, return the kth row of the Pascal's triangle. For example, given k = 3,Ret ...