小老鼠走迷宫

本文介绍了一种基于广度优先搜索的迷宫寻路算法,该算法能够在给定的0和1组成的迷宫中找到从起点到终点的路径。通过使用队列结构存储待探索的位置,并记录已访问过的节点来避免重复探索。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一个N*M的迷宫矩阵由0和1组成,1表示墙壁,0表示通路。

一只小老鼠从左上角即坐标(1,1)出发,只能走上下左右四个方向(不能走斜线),问小老鼠能否吃到右下角出口即坐标(N,M)处的奶酪。

M,N<=2000

输入

第一行输入空格分开的两个整数N,M,表示迷宫的行数和列数

然后输入N行M列的迷宫矩阵

输出

若能走到出口,输出“yes”,否则输出“no”

样例输入

5 5

0 0 1 0 1

0 0 1 0 0

0 1 0 1 1

0 1 0 0 0

0 0 0 0 0

样例输出

yes

 

#include <bits/stdc++.h>

using namespace std;

int n,m;

int q[4010010][3];

int dx[4]={-1,1,0,0};

int dy[4]={0,0,-1,1};

bool vis[2010][2010];

char maps[2010][2010];

int front,rear;

int main()

{

    cin>>n>>m;

    for(int i=1;i<=m;i++)

        for(int j=1;j<=n;j++)

            cin>>maps[i][j];

    front=rear=1;

    q[1][0]=1;

    q[1][1]=1;

    q[1][2]=1;

    vis[1][1]=true;

    while(front<=rear)

    {

        int fy=q[front][1];

        int fx=q[front][0];

        for(int i=0;i<4;i++)

        {

            int nx=fx+dx[i];

            int ny=fy+dy[i];

            if(nx>=1 && nx<=n && ny>=1 && ny<=n && !vis[nx][ny] && maps[nx][ny]=='0')

            {

                rear++;

                q[rear][0]=nx;

                q[rear][1]=ny;

                q[rear][2]=q[front][2]+1;

                vis[nx][ny]=true;

                if(nx==m && ny==n)

                {

                    cout<<"yes";

                    return 0;

                }

            }

        }

        front++;

    }

    cout<<"no";

    return 0;

}            

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值