每日一题:Leetcode1926.迷宫中离入口最近的出口

2023-12-13 22:48:49

给你一个?m x n?的迷宫矩阵?maze?(下标从 0 开始),矩阵中有空格子(用?'.'?表示)和墙(用?'+'?表示)。同时给你迷宫的入口?entrance?,用?entrance = [entrancerow, entrancecol]?表示你一开始所在格子的行和列。

每一步操作,你可以往??或者??移动一个格子。你不能进入墙所在的格子,你也不能离开迷宫。你的目标是找到离?entrance?最近?的出口。出口?的含义是?maze?边界?上的?空格子entrance?格子?不算?出口。

请你返回从?entrance?到最近出口的最短路径的?步数?,如果不存在这样的路径,请你返回?-1?。

示例 1:

输入:maze = [["+","+",".","+"],[".",".",".","+"],["+","+","+","."]], entrance = [1,2]
输出:1
解释:总共有 3 个出口,分别位于 (1,0),(0,2) 和 (2,3) 。
一开始,你在入口格子 (1,2) 处。
- 你可以往左移动 2 步到达 (1,0) 。
- 你可以往上移动 1 步到达 (0,2) 。
从入口处没法到达 (2,3) 。
所以,最近的出口是 (0,2) ,距离为 1 步。

示例 2:

输入:maze = [["+","+","+"],[".",".","."],["+","+","+"]], entrance = [1,0]
输出:2
解释:迷宫中只有 1 个出口,在 (1,2) 处。
(1,0) 不算出口,因为它是入口格子。
初始时,你在入口与格子 (1,0) 处。
- 你可以往右移动 2 步到达 (1,2) 处。
所以,最近的出口为 (1,2) ,距离为 2 步。

示例 3:

输入:maze = [[".","+"]], entrance = [0,0]
输出:-1
解释:这个迷宫中没有出口。

提示:

  • maze.length == m
  • maze[i].length == n
  • 1 <= m, n <= 100
  • maze[i][j]?要么是?'.'?,要么是?'+'?。
  • entrance.length == 2
  • 0 <= entrancerow < m
  • 0 <= entrancecol < n
  • entrance?一定是空格子。
class Solution {
public:
    int dx[4]={0,0,1,-1};
    int dy[4]={1,-1,0,0};

    int nearestExit(vector<vector<char>>& maze, vector<int>& entrance) {
        int m=maze.size();
        int n=maze[0].size();

        queue<pair<int,int>> q;
        bool vis[m][n];
        memset(vis,0,sizeof vis);

        q.push({entrance[0],entrance[1]});
        vis[entrance[0]][entrance[1]]=true;

        int step=0;
        while(q.size())
        {
            step++;
            int sz=q.size();
            for(int i=0;i<sz;i++)
            {
                auto [a,b]=q.front();
                q.pop();
                for(int j=0;j<4;j++)
                {
                    int x=a+dx[j],y=b+dy[j];
                    if(x>=0&&x<m&&y>=0&&y<n&&maze[x][y]=='.'&&!vis[x][y])
                    {
                        if(x==0||x==m-1||y==0||y==n-1)
                            return step;
                        q.push({x,y});
                        vis[x][y]=true;
                    }
                }
            }
        }
        return -1;

    }
};

文章来源:https://blog.csdn.net/m0_73865858/article/details/134855212
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。