迷宫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表示通路,从左上角走到右下角并输出路径. 本题思路: ...
随机推荐
- Vue 实现微信提示浏览器转跳功能
<template> <div class="main"> <div :class="show==true ? 'block':'block ...
- 清理docker常用命令
0.查看docker占用空间docker system df1.一键删除所有已经停止的容器 docker container prune 2.删除所有容器(包含停止的 正在运行的) docker rm ...
- Linux 进程间传递文件描述符
文章目录 文件描述符 文件数据结构 共享文件 UNIX域socket实现传递文件描述符 进程间传递打开的文件描述符,并不是传递文件描述符的值.先说一下文件描述符. 文件描述符 对内核来说,所有打开的文 ...
- 程序员作图工具和技巧,你 get 了么?
分享程序员常用的画图软件和小技巧 大家好,我是鱼皮. 说实话,我觉得做个程序员挺好的.日常工作有很多,写代码.对需求.写方案等等,但我最爱画图:流程图.架构图.交互图.功能模块图.UML 类图.部署图 ...
- 线程队列 concurrent 协程 greenlet gevent
死锁问题 所谓死锁:是指两个或两个以上的进程或线程在执行过程中,因争夺资源而造成的一种互相等待的现象,若无外力作用,它们都将无法推进下去.此时称系统处于死锁状态或系统产生了死锁,这些永远在互相等待的进 ...
- ASP.NET Core教程:ASP.NET Core 程序部署到Windows系统
一.创建项目 本篇文章介绍如何将一个ASP.NET Core Web程序部署到Windows系统上.这里以ASP.NET Core WebApi为例进行讲解.首先创建一个ASP.NET Core We ...
- WPF---数据绑定(二)
一.绑定到非UI元素 上篇中,我们绑定的数据源均是派生自UIElement的WPF元素.本篇描述的绑定数据源是一个我们自定义的普通的类型. 注:尽管绑定的数据源可以是任意类型的对象,但Path必须总是 ...
- 三 MongoDB进阶
1 Limit方法 概念:查询指定数量的数据,该方法接受一个数字参数作为查询记录数的数量 举个例子:查询集合col中最多2条记录数 2 Skip方法 概念:查询到的结果集中,跳过指定数量的数据,该方法 ...
- jQuery中的常用方法:empty()、each()、$.each()、$.trim()、focus()(二)
<!DOCTYPE html> <html> <head> <title>02_commonMethod.html</title> < ...
- Spark消费Kafka如何实现精准一次性消费?
1.定义 精确一次消费(Exactly-once) 是指消息一定会被处理且只会被处理一次.不多不少就一次处理. 如果达不到精确一次消费,可能会达到另外两种情况: 至少一次消费(at least onc ...