迷宫(二)--计蒜客-BFS解法

蒜头君在迷宫中寻找最少步数的逃出路径,使用BFS算法进行求解。输入为n×m的迷宫布局,包含'S'起点,'*'墙壁,'.'通道和'T'终点。输出蒜头君到达出口的最短步数,无法逃出则输出-1。数据范围1≤n,m≤10。" 104234209,8756326,深度学习图像分割:从FCN到DeepLabV3+,"['深度学习', '图像处理', '语义分割', '计算机视觉', '模型库']
摘要由CSDN通过智能技术生成

题目链接:https://nanti.jisuanke.com/t/T1596
题目 :
蒜头君在你的帮助下终于逃出了迷宫,但是蒜头君并没有沉浸于喜悦之中,而是很快的又陷入了思考,从这个迷宫逃出的最少步数是多少呢?
输入格式
第一行输入两个整数 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<algorithm>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<queue>
typedef long long LL;
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;
int visited[20][20];
int n,m,qx,qy,zx,zy;
char maze[20][20];
int dx[5]={0,0,-1,1};
int dy[5]={-1,1,0,0};
int main()
{
    cin >> n >> m;
    for(int i=0;i<n;i++){
        for(int j=0;j<m;j++){
            cin >> maze[i][j];
            if(maze[i][j]=='S'){
                qx = i;qy = j;
            }
            if(maze[i][j]=='T'){
                zx = i;zy = j;
            }
        }
    }
    q.push(Node(qx,qy,0));
    while(!q.empty()){
        Node s = q.front();
        if(s.x==zx&&s.y==zy){
            cout << s.step;
            return 0;
        }
        else {
            for(int i=0;i<4;i++){
                int xx = s.x+dx[i];
                int yy = s.y+dy[i];
                if(xx>=0&&yy>=0&&xx<n&&yy<m&&!visited[xx][yy]&&maze[xx][yy]!='*'){
                    visited[xx][yy] = 1;
                    q.push(Node(xx,yy,s.step+1));
                }
            }
        }
        q.pop();
    }
    cout << "-1" << endl;
    return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值