生活随笔
收集整理的這篇文章主要介紹了
LeetCode 1926. 迷宫中离入口最近的出口(BFS)
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
文章目錄
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
; maze
[nx
][ny
] = '+'; 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)容還不錯,歡迎將生活随笔推薦給好友。