沼跃鱼早已看穿了一切 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,并把每个字符变为’#‘ ,最后统 ...
随机推荐
- css盒子模型,定位,浮动
1.盒子模型 Margin(外边距) - 清除边框外的区域,外边距是透明的. Border(边框) - 围绕在内边距和内容外的边框. Padding(内边距) - 清除内容周围的区域,内边距是透明的. ...
- Draw2d中的布局管理器Layout比较
最近在研究Eclipse中的GEF开发,在跟着GEF-whole-upload教程做一个GEF应用程序的例子时,发现Figure上的控件无法显示,谷歌了很久也没找到解决方案,最后终于发现是Layout ...
- js 函数声明与函数表达式
1,变量包括全局变量和局部变量,局部变量只能在函数内部访问.如果函数传参和全局变量一样的话,即使是给全局变量赋值,这里会把全局变量当成局部变量的. 如: 1: var x='x'; 2: 3: ...
- 一种无new创建对象的方法
var L=function(){ var obj = { age:38, live:true, job:"web dev" }; obj.name = "zhouhui ...
- [转]fatal error: iostream.h: No such file or directory
iostream.h是非标准头文件,iostream是标准头文件形式.iostream.h时代没有名词空间,即所有库函数包括头文件iostream.h都声明在全局域.为了体现结构层次,c++标准委员会 ...
- python运维开发(二十二)---JSONP、瀑布流、组合搜索、多级评论、tornado框架简介
内容目录: JSONP应用 瀑布流布局 组合搜索 多级评论 tornado框架简介 JSONP应用 由于浏览器存在同源策略机制,同源策略阻止从一个源加载的文档或脚本获取或设置另一个源加载的文档的属性. ...
- Monkey学习笔记<四>:Monkey服务器命令
#使用如下命令将本地pc和手机连接起来 adb shell monkey --port 1080 adb forward tcp 1080:tcp 1080 telnet localhost 1080 ...
- abiword Related Pages
Application Framework The 'af' directory contains all source code for the cross-platform application ...
- Delphi线程同步(临界区、互斥、信号量,包括详细代码)
当有多个线程的时候,经常需要去同步这些线程以访问同一个数据或资源. 例如,假设有一个程序,其中一个线程用于把文件读到内存,而另一个线程用于统计文件的字符数.当然,在整个文件调入内存之前,统计它的计数是 ...
- python list列表 方法总结
深入链表(most on lists) The list data type has some more methods. Here are all of the methods of list ob ...