日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

LeetCode 1926. 迷宫中离入口最近的出口(BFS)

發(fā)布時間:2024/7/5 编程问答 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 LeetCode 1926. 迷宫中离入口最近的出口(BFS) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

文章目錄

    • 1. 題目
    • 2. 解題

1. 題目

給你一個 m x n 的迷宮矩陣 maze (下標(biāo)從 0 開始),矩陣中有空格子(用 '.' 表示)和(用 '+' 表示)。
同時給你迷宮的入口 entrance ,用 entrance = [entrancerow, entrancecol] 表示你一開始所在格子的行和列。

每一步操作,你可以往 上,下,左 或者 右 移動一個格子。
你不能進(jìn)入墻所在的格子,你也不能離開迷宮。
你的目標(biāo)是找到離 entrance 最近 的出口
出口 的含義是 maze 邊界 上的 空格子。entrance 格子 不算 出口。

請你返回從 entrance 到最近出口的最短路徑的 步數(shù) ,如果不存在這樣的路徑,請你返回 -1 。

示例 1:

輸入:maze = [["+","+",".","+"],[".",".",".","+"],["+","+","+","."]], entrance = [1,2] 輸出:1 解釋:總共有 3 個出口,分別位于 (1,0)(0,2)(2,3) 。 一開始,你在入口格子 (1,2) 處。 - 你可以往左移動 2 步到達(dá) (1,0)- 你可以往上移動 1 步到達(dá) (0,2) 。 從入口處沒法到達(dá) (2,3) 。 所以,最近的出口是 (0,2) ,距離為 1 步。

示例 2:

輸入:maze = [["+","+","+"],[".",".","."],["+","+","+"]], entrance = [1,0] 輸出:2 解釋:迷宮中只有 1 個出口,在 (1,2) 處。 (1,0) 不算出口,因為它是入口格子。 初始時,你在入口與格子 (1,0) 處。 - 你可以往右移動 2 步到達(dá) (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 一定是空格子。

來源:力扣(LeetCode)
鏈接:https://leetcode-cn.com/problems/nearest-exit-from-entrance-in-maze
著作權(quán)歸領(lǐng)扣網(wǎng)絡(luò)所有。商業(yè)轉(zhuǎn)載請聯(lián)系官方授權(quán),非商業(yè)轉(zhuǎn)載請注明出處。

2. 解題

  • 標(biāo)準(zhǔn)的 廣度優(yōu)先搜索 模板題
class Solution { public:int nearestExit(vector<vector<char>>& maze, vector<int>& entrance) {int m = maze.size(), n = maze[0].size(), step = 0;typedef pair<int,int> pii;queue<pii> q;q.push({entrance[0], entrance[1]});maze[entrance[0]][entrance[1]] = '+'; // 訪問過了vector<vector<int>> dir = {{1,0},{0,1},{0,-1},{-1,0}};while(!q.empty()){int size = q.size();step++;while(size--){ int x = q.front().first;int y = q.front().second;q.pop();for(int k = 0; k < 4; ++k){int nx = x + dir[k][0];int ny = y + dir[k][1];if(nx>=0 && nx<m && ny>=0 && ny<n && maze[nx][ny]!='+') //不為墻{if(nx==0 || nx==m-1 || ny==0 || ny==n-1)return step; // 到達(dá)邊界出口maze[nx][ny] = '+'; // 標(biāo)記為走過了q.push({nx, ny});}}}}return -1;} };

100 ms 29.1 MB C++


我的CSDN博客地址 https://michael.blog.csdn.net/

長按或掃碼關(guān)注我的公眾號(Michael阿明),一起加油、一起學(xué)習(xí)進(jìn)步!

總結(jié)

以上是生活随笔為你收集整理的LeetCode 1926. 迷宫中离入口最近的出口(BFS)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。