Problem 2285 迷宫寻宝 (BFS)
题目链接:http://acm.fzu.edu.cn/problem.php?pid=2285
Accept: 323 Submit: 1247
Time Limit: 1000 mSec Memory Limit : 32768
KB
Problem Description
洪尼玛今天准备去寻宝,在一个n*n (n行,
n列)的迷宫中,存在着一个入口、一些墙壁以及一个宝藏。由于迷宫是四连通的,即在迷宫中的一个位置,只能走到与它直接相邻的其他四个位置(上、下、左、右)。现洪尼玛在迷宫的入口处,问他最少需要走几步才能拿到宝藏?若永远无法拿到宝藏,则输出-1。
Input
多组测试数据。
每组数据输入第一行为正整数n,表示迷宫大小。
接下来n行,每行包括n个字符,其中字符'.'表示该位置为空地,字符'#'表示该位置为墙壁,字符'S'表示该位置为入口,字符'E'表示该位置为宝藏,输入数据中只有这四种字符,并且'S'和'E'仅出现一次。
n≤1000
Output
输出拿到宝藏最少需要走的步数,若永远无法拿到宝藏,则输出-1。
Sample Input
S.#..
#.#.#
#.#.#
#...E
#....
Sample Output
宽度优先搜索简单题,但是这题输入比较多需要用scanf
#include <iostream>
#include <algorithm>
#include <cmath>
#include <string>
#include <cstdio>
#include <cstring>
#include <queue>
using namespace std;
const int INF=0x3f3f3f3f;
typedef pair<int,int> P;
char a[][];
int n;
int dx[]={,-,,},dy[]={,,,-};
int sx,sy,gx,gy;
int d[][];
int bfs()
{
//for(int i=0;i<n;i++){
// for(int j=0;j<n;j++){
// d[i][j]=INF;
// }
//}
memset(d,INF,sizeof(d));//上面的简写
d[sx][sy]=;
queue<P> que;
que.push(P(sx,sy));
while(!que.empty()){
P p=que.front();
que.pop();
int x=p.first,y=p.second;
if(x==gx&&y==gy) break;
for(int i=;i<;i++){
int nx=x+dx[i],ny=y+dy[i];
if(nx>=&&nx<n&&ny>=&&ny<n&&a[nx][ny]!='#'&&d[nx][ny]==INF){
que.push(P(nx,ny));
d[nx][ny]=d[x][y]+;
}
}
}
if(d[gx][gy]==INF) return -;
else return d[gx][gy];
}
int main()
{
while(scanf("%d",&n)!=EOF){
for(int i=;i<n;i++){
scanf("%s",a[i]);
}
for(int i=;i<n;i++){
for(int j=;j<n;j++){
if(a[i][j]=='S'){
sx=i,sy=j;
}
if(a[i][j]=='E'){
gx=i,gy=j;
}
}
}
cout<<bfs()<<endl;
}
return ;
}
Problem 2285 迷宫寻宝 (BFS)的更多相关文章
- Problem 2285 迷宫寻宝
http://acm.fzu.edu.cn/problem.php?pid=2285 Problem Description 洪尼玛今天准备去寻宝,在一个n*n (n行, n列)的迷宫中,存在着一个入 ...
- FZU 2285 迷宫寻宝
思路: bfs求最短路径. #include<stdio.h> #include<iostream> #include<queue> #include<cst ...
- 福州大学第十五届程序设计竞赛_重现赛B题迷宫寻宝
Problem B 迷宫寻宝 Accept: 52 Submit: 183Time Limit: 1000 mSec Memory Limit : 32768 KB Problem De ...
- 迷宫寻宝(一)(bfs)
迷宫寻宝(一) 时间限制:1000 ms | 内存限制:65535 KB 难度:4 描述 一个叫ACM的寻宝者找到了一个藏宝图,它根据藏宝图找到了一个迷宫,这是一个很特别的迷宫,迷宫里有N个编 ...
- NYOJ82 迷宫寻宝(一)【BFS】
迷宫寻宝(一) 时间限制:1000 ms | 内存限制:65535 KB 难度:4 描写叙述 一个叫ACM的寻宝者找到了一个藏宝图.它依据藏宝图找到了一个迷宫,这是一个非常特别的迷宫,迷宫里有N个 ...
- nyoj 82 迷宫寻宝(一)
点击打开链接 迷宫寻宝(一) 时间限制:1000 ms | 内存限制:65535 KB 难度:4 描述 一个叫ACM的寻宝者找到了一个藏宝图,它根据藏宝图找到了一个迷宫,这是一个很特别的迷宫,迷宫 ...
- 数据结构实习 Problem H 迷宫的最短路径
数据结构实习 Problem H 迷宫的最短路径 题目描述 设计一个算法找一条从迷宫入口到出口的最短路径. 输入 迷宫的行和列m n 迷宫的布局 输出 最短路径 样例输入 6 8 0 1 1 1 0 ...
- [HIHO1328]逃离迷宫(bfs,位压)
题目链接:http://hihocoder.com/problemset/problem/1328 这个题bfs到时候不止要存当前的坐标,还要存当前有哪几把钥匙.因为5把钥匙,所以可以直接用位来存,这 ...
- Unity3D实现立体迷宫寻宝
Unity3D实现立体迷宫寻宝 这个小游戏是一个白痴在一个昏暗的房间走动找到关键得分点,然后通关游戏.入门Unity3D做的第一款游戏,比较无聊,但实现了一般的游戏功能.如,人物控制,碰撞检测,主控制 ...
随机推荐
- 201771010126.王燕《面向对象程序设计(Java)》第六周学习总结
实验六 继承定义与使用 实验时间 2018-9-28 1.实验目的与要求 (1) 理解继承的定义: 继承就是用已有类来构建新类的一种机制,当你继承了一个类时,就继承了这个类的方法和字段,同时你也可以在 ...
- 微信公众号_订阅号_爬虫puppeteer
puppeteer 借助 puppeteer 库实现爬虫,puppeteer 提供了高级 api 接口来操作 chrome 来 npm install puppeteer --save-dev ...
- amoeba实现读写分离
amoeba的运行环境依靠java的jdk: 下面执行amoeba的安装不走 # mkdir /usr/local/src/amoeba 上传文件:amoeba-mysql-binary-2.2.0. ...
- TCP三次握手四次挥手最通俗理解
工作过程TCP标志位:TCP共有6个标志位,分别是: SYN(synchronous),建立联机.ACK(acknowledgement),确认.PSH(push),传输.FIN(finish),结束 ...
- CentOS / RHEL 7 : How to setup yum repository using locally mounted DVD
1. Mount the RHEL 7 installation media ISO to some directory. For example /mnt : # mount -o loop rhe ...
- 12生成器,send,推导式
# 1.生成器的本质就是迭代器 # 2.通过函数变成一个生成器 # def func(): # print(1) # yield 5 # 我的函数走到这了 # print(2) # yield 9 # ...
- spring mvc 总结
依赖包 <!-- spring依赖 --> <dependency> <groupId>org.springframework</groupId> &l ...
- 关于parseInt()里的一些小坑
parseInt(string,radix)方法是将输入字符串转化为数值,两个输入参数中string为要转化的字符串,radix可省略,是浏览器以几进制来解读输入的string. 举几个例子就能够对该 ...
- kafka手动开启监听
项目集成spring-kafka,在项目启动后需要做些初始化资源的任务,kafka消费会依赖这些所以需要配置kafka手动启动. 类似这样,设置autoStartup为false 然后代码里面调用这个 ...
- 创建一个vue项目()
1.打开cmd,选定路径 2. vue init webpack "项目名称“ 3.在项目路径下,安装一下项目依赖 cnpm install 4.运行 cnpm run dev 5.在浏 ...