ETH官方钱包

前往
大廳
主題

LeetCode - 0909. Snakes and Ladders 解題心得

Not In My Back Yard | 2024-01-01 12:00:20 | 巴幣 0 | 人氣 113

題目連結:


題目意譯:
你被給定一個 n × n 的整數矩陣 board,其中每一個格子編號為 1 到 n ^ 2 並且從版面(Board)的左下角開始填入(即 board[n - 1][0])以牛耕式轉行書寫法之方式在每一列切換方向。

你開始於 board 的 1 號格子。在每一步中,從 curr 號格子,做以下操作:
    選擇一個目標格子 next,其編號位於範圍 [curr + 1, min(curr + 6, n ^ 2)] 之中。
        這個選擇將模擬一個標準 6 面骰子的結果:即不論版面的大小,最多只會有 6 個可能的目標。

    如果 next 是一隻蛇或一個梯子,你必須移至該蛇或梯子結束的位置。否則,直接移動到 next 這個格子即可。

    此遊戲在你抵達 n ^ 2 號格子後結束。

一個位於版面上第 r 列第 c 行的格子如果滿足 board[r][c] != -1 則該格子有一隻蛇或梯子。該蛇或梯子結束的位置為 board[r][c]。 1 號和 n ^ 2 號格子不會有蛇和梯子。

注意到你在一步之中最多只會「使用」蛇或梯子一次。如果某隻蛇或某個梯子結束的位置是另一隻蛇或另一個梯子的開頭,則你將不會循著下一隻蛇或下一個梯子。

例如說,假設版面為 [[-1,4],[-1,3]],而在第一步中,你的目標格子為 2。你將循著梯子抵達 3 號格子,但是不會繼續循著下一個梯子到 4 號格子。

回傳抵達 n ^ 2 最少所需的步數。如果不可能抵達該格子,則回傳 -1。

限制:
n == board.length == board[i].length
2 ≦ n ≦ 20
board[i][j] 只會是 -1 或是位於範圍 [1, n ^ 2] 中。
1 號和 n ^ 2 號格子不會有任何梯子和蛇。



範例測資:
範例 1:
輸入: board = [[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,35,-1,-1,13,-1],[-1,-1,-1,-1,-1,-1],[-1,15,-1,-1,-1,-1]]
輸出: 4
解釋:
在一開始,你位於 1 號格子(位於第 5 列、第 0 行)。
你接著選擇移動到 2 號格子,並應循著梯子走到 15 號格子。
你接著選擇移動到 17 號格子,並應循著蛇走到 13 號格子。
你接著選擇移動到 14 號格子,並應循著梯子走到 35 號格子。
你接著選擇移動到 36 號格子,並結束遊戲。
這是抵達最後一個格子最少可能的步數,所以回傳 4。

範例 2:
輸入: board = [[-1,-1],[-1,3]]
輸出: 1


解題思維:
基本上跟一般走迷宮(如這題)或走某個圖(如這題)一樣使用廣度優先搜尋(Breadth First Search,BFS)來從 1 號格子逐漸地擴散至 n ^ 2 號格子即可。

如果最終有擴散到 n ^ 2 號格子,則此時的「擴散步數」即是所求的最少步數;反之,則代表 1 號格子到不了 n ^ 2 號格子,因此回傳 -1。




此次分享到此為止,如有任何更加簡潔的想法或是有說明不清楚之地方,也煩請各位大大撥冗討論。

創作回應

更多創作