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做的第一款游戏,比较无聊,但实现了一般的游戏功能.如,人物控制,碰撞检测,主控制 ...
随机推荐
- Eureka源码解读
Eureka是我接触分布式软件和服务的第一个框架,所以其原理和实现我的好好研究一下,Eureka可以参看这篇博文:http://springcloud.cn/view/29 初学者会在教程中看到使用@ ...
- linux学习:wget与lynx用法整理
指令:wget.lynx.axel wget url #下载数据写入文件,下载的文件名与url中的文件名保持一致,下载信息或进度写入stdoutwget url1 url2 url3 #下载多 ...
- 剑指offer——python【第59题】按之子形顺序打印二叉树
题目描述 请实现一个函数按照之字形打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右至左的顺序打印,第三行按照从左到右的顺序打印,其他行以此类推. 解题思路 这道题其实是分层打印二叉树的进阶版 ...
- ffmpeg日志调式
1.播放器打印输出调试日志:ffplay -v debug $URL2.播放器打开详细调试日志:./ffplay -loglevel 563.修改源码修改日志级别: 1)log.c中:stati ...
- 关于JDBC的批量操作executeBatch()所引发sql语句异常
java.sql.BatchUpdateException: You have an error in your SQL syntax; check the manual that correspon ...
- 阿里云入坑指南&&nodejs 安装配置
买了阿里云1G1核1M的机器(800元,3年) 登录阿里云-实例-选择实例所在地区-重置密码 用公网IP ssh连接 #升级CentOS yum -y update #安装or更新组件 yum -y ...
- [dev] Go的协程切换问题
子标题:runtime.Gosched() 是干嘛用的? 1. go程序都有一个环境变量,做线程数设置 GOMAXPROCS 2. 当协程数小于等于线程数的时候,程序行为上与多线程没有区别. 3. 当 ...
- apache tomcat的安装
第一步:下载及安装. 1.首先进入apache的官网网址:www.apache.org 2.点击 projects 3.进入tomcat下载页面. 4.点击tomcat 9 5.认准是Binary D ...
- 最长连续子序列(dp,分而治之递归)
5227: 最大子列和问题 时间限制(普通/Java):1000MS/3000MS 内存限制:65536KByte 总提交: 76 测试通过:46 描述 给定KK个整数组 ...
- .net开发COM组件之组件签名&注册
基于.net的COM组件开发时,若采用vs强命名方式,则完成后试图将组件注册到XP系统(确切的说是.net4.0以下版本的系统) REGASM c:\libcom\dotnet\myCom.dll / ...