迷宫2----BFS
题目 :
蒜头君在你的帮助下终于逃出了迷宫,但是蒜头君并没有沉浸于喜悦之中,而是很快的又陷入了思考,从这个迷宫逃出的最少步数是多少呢?
输入格式
第一行输入两个整数 n 和 m,表示这是一个 n×m 的迷宫。
接下来的输入一个 n 行 m 列的迷宫。其中 ‘S’表示蒜头君的位置,’‘表示墙,蒜头君无法通过,’.‘表示路,蒜头君可以通过’.'移动,'T’表示迷宫的出口(蒜头君每次只能移动到四个与他相邻的位置——上,下,左,右)。
输出格式
输出整数,表示蒜头君逃出迷宫的最少步数,如果蒜头君无法逃出迷宫输出 −1。
数据范围
1≤n,m≤10。
输出时每行末尾的多余空格,不影响答案正确性
样例输入1
3 4
S**.
..*.
***T
样例输出1
-1
样例输入2
3 4
S**.
....
***T
样例输出2
5
代码:
#include<iostream>
#include<queue>
using namespace std; struct Node
{
int x,y,step;
Node(int xx,int yy,int ss):x(xx),y(yy),step(ss){ }
}; queue<Node>q;
bool mark[20][20];
int n,m,beginx,beginy,endx,endy,step=0; char map[20][20];
int dx[5]={0,0,-1,1};
int dy[5]={-1,1,0,0};
//限界函数
bool check(int r,int c){
if (r>=0&&r<n&&c>=0&&c<m)
return true;
return false;
}
void BFS(int r,int c){
//第一步,先把起始点放入queue,设置层数step=0
q.push(Node(r,c,0));
//第二步,查找,队列非空就有机会找到
while (!q.empty())
{
//第三步,取对头
Node s = q.front();
//找到即可退出
if (s.x==endx&&s.y==endy)
{
cout<<s.step<<endl;
return ;
}else
{
//遍历子节点
for (int i = 0; i < 4; i++)
{
int newx=s.x+dx[i];
int newy = s.y+dy[i]; //判断子节点是否可以通过,可通过则压栈,设置已访问
if (check(newx,newy)&&!mark[newx][newy]&&map[newx][newy]!='*')
{
mark[newx][newy]=true;
q.push(Node(newx,newy,s.step+1));
}
}
}
q.pop();
}
cout<<"-1"<<endl;
return; }
int main(){
cin>>n>>m;
for (int i = 0; i < n; i++)
{
cin>>map[i];
for (int j=0; j < m; j++)
{
if (map[i][j]=='S')
{
beginx= i;
beginy=j;
}else if (map[i][j]=='T')
{
endx= i;
endy=j;
}
}
}
BFS(beginx,beginy);
}
迷宫2----BFS的更多相关文章
- 迷宫问题(bfs)
import java.util.LinkedList; import java.util.Queue; import java.util.Stack; public class BFS { priv ...
- ZZULIOJ 1726 迷宫(BFS+小坑)
1726: 迷宫 Time Limit: 1 Sec Memory Limit: 128 MB Submit: 394 Solved: 64 SubmitStatusWeb Board Descr ...
- HDU 1728 逃离迷宫(BFS)
Problem Description 给定一个m × n (m行, n列)的迷宫,迷宫中有两个位置,gloria想从迷宫的一个位置走到另外一个位置,当然迷宫中有些地方是空地,gloria可以穿越,有 ...
- HDU 1728:逃离迷宫(BFS)
http://acm.hdu.edu.cn/showproblem.php?pid=1728 逃离迷宫 Problem Description 给定一个m × n (m行, n列)的迷宫,迷宫中有 ...
- 迷宫问题(bfs的应用)
问题描述: 定义一个二维数组N*M(其中2<=N<=10;2<=M<=10),如5 × 5数组下所示: int maze[5][5] = { 0, 1, 0, 0, 0, 0, ...
- [Swust OJ 409]--小鼠迷宫问题(BFS+记忆化搜索)
题目链接:http://acm.swust.edu.cn/problem/409/ Time limit(ms): 1000 Memory limit(kb): 65535 Description ...
- 问题 1923: [蓝桥杯][算法提高VIP]学霸的迷宫 (BFS)
题目链接:https://www.dotcpp.com/oj/problem1923.html 题目描述 学霸抢走了大家的作业,班长为了帮同学们找回作业,决定去找学霸决斗.但学霸为了不要别人打扰,住在 ...
- POJ 3984 - 迷宫问题 - [BFS水题]
题目链接:http://poj.org/problem?id=3984 Description 定义一个二维数组: int maze[5][5] = { 0, 1, 0, 0, 0, 0, 1, 0, ...
- 迷宫问题bfs, A Knight's Journey(dfs)
迷宫问题(bfs) POJ - 3984 #include <iostream> #include <queue> #include <stack> #incl ...
- POJ-3984.迷宫问题(BFS + 路径输出)
昨天中午做的这道题,结果蛙了一整天,就因为一行代码困住了,今天算是见识到自己有多菜了.流泪.jpg 本题大意:给一个5 * 5的迷宫,1表示墙壁,0表示通路,从左上角走到右下角并输出路径. 本题思路: ...
随机推荐
- QZHWTEST2021.5.23分析
树上游戏 题面 题目描述 \(FLY\)和朋友玩一个游戏. 在一棵树上,每个点都有一个点权,\(FLY\)和朋友从根开始,轮流取出点权作为分值,并且由当前玩家选择前往哪一个儿子,直到到达叶子节点后计算 ...
- 微信小程序开发(二)——使用WeUI组件库
一.前言 因为小程序的api描述都比较简单,并没有wxml及wxss的描述,一定会想小程序有没有一个UI库,类似于前端中的Bootstrap,MD,Semantic UI这样的框架UI库.有的,它就是 ...
- STP工作流程
第一步:选择一个根网桥: 第二步:在每个非根网乔上选举一个根端口: 第三步:在每个网段上选举一个指定端口: 第四步:阻塞非根,非指定端口:
- SpringBoot JPA查询映射到自定义实体类
和 SegmentFault上的文章(https://segmentfault.com/a/1190000021869465)一样, 都是俺账号 场景 举一个简单的栗子: 比如有一个User实体类 @ ...
- SSM自学笔记(一)
本文内容 Ioc和DI Spring快速入门 Spring配置文件 Spring IoC和DI注解开发 Spring配置数据源 Spring注解开发 Spring整合Junit IoC 和 DI 1. ...
- ASP.NET Core端点路由中三种让人困惑的路由函数
早先提及了端点路由app.UseEndpoints, 端点路由强调的是端点和 路由,其核心目的是将 请求落地点与路由寻址方式解耦. 这里面有几个容易混淆的函数 MapControllerRoute M ...
- 「TJOI2019」唱、跳、rap 和篮球 题解
题意就不用讲了吧-- 鸡你太美!!! 题意: 有 \(4\) 种喜好不同的人,分别最爱唱.跳. \(rap\).篮球,他们个数分别为 \(A,B,C,D\) ,现从他们中挑选出 \(n\) 个人并进行 ...
- Redis5.0 配置文件中文参考
Redis 5.0 配置文件#是否在后台执行,yes:后台运行:no:不是后台运行daemonize yes#是否开启保护模式,默认开启.要是配置里没有指定bind和密码.开启该参数后,redis只会 ...
- Java程序设计学习笔记(五) — 多线程
时间:2016-4-15 09:56 --多线程(还有多核编程) 1.进程 进程是一个正在执行中的程序. 每一个进程执行都有一个执行顺序,该顺序是一个执行路径, ...
- MySQL日志系统bin log、redo log和undo log
MySQL日志系统bin log.redo log和undo log 今人不见古时月,今月曾经照古人. 简介:日志是MySQL数据库的重要组成部分,记录着数据库运行期间各种状态信息,主要包括错误日 ...