OJ LeetCode 994 腐爛的橘子

2021-10-03 11:59:53 字數 1715 閱讀 1228

由題目可以看出,每次從乙個已經腐爛的橘子向外層蔓延,不難看出這是在模擬廣度優先搜尋bfs的例程

因此我們所用到的就是bfs演算法

大致過程如下:

首先遍歷整個網格,找到已經腐爛的橘子,加入佇列;

從已經腐爛的橘子去更新相鄰的橘子,直到隊列為空;

若隊列為空,網格上還有新鮮橘子,返回-1,否則返回總時間

但在實際程式設計中,卻遇到了兩個問題

入隊的資料應該是此時橘子的座標,那麼應該是什麼資料型別?

如何去判斷當前橘子的四個正方向座標,陣列的邊界判定如何實現?

入隊的資料的話,採取的方案就是計算當前座標的代數值,如乙個4*4的網格,左上角作為座標原點,那麼(2,2)的座標代數值為2 *4 + 2 = 10

推廣為一般化形式:

乙個m x n的矩陣,(i, j)的座標代數值= i * n + j

關於四個正方向的判定問題採取的是官方的解答,即建立兩個陣列

int

dr =

newint

;int

dc =

newint

;

用乙個4層迴圈 每次改變行/列的值

如果當前座標(i,j)是合法的,並且該網格上的是新鮮的橘子,更新其值併入佇列

for

(int k=

0; k<

4; k++

)}

class

solution

;int

dc =

newint

;int times =0;

queue

queue =

newlinkedlist

<

>()

;//爛橘子入隊

for(

int i=

0; i

while

(!queue.

isempty()

)}}if

(!queue.

isempty()

) times++;}

for(

int i=

0; i

return times;

}}

越早被訪問到的頂點,其鄰居越優先被選用

不難發現,廣度優先搜尋即樹結構中層序遍歷,用到的輔助結構為——佇列

以下是鄧俊輝《資料結構》中的樣例:

優先選取最後乙個被訪問到的頂點的鄰居

本質上來說就是遞迴+回溯

994 腐爛的橘子

在給定的網格中,每個單元格可以有以下三個值之一 值 0 代表空單元格 值 1 代表新鮮橘子 值 2 代表腐爛的橘子。每分鐘,任何與腐爛的橘子 在 4 個正方向上 相鄰的新鮮橘子都會腐爛。返回直到單元格中沒有新鮮橘子為止所必須經過的最小分鐘數。如果不可能,返回 1。示例 1 輸入 2,1,1 1,1,...

994 腐爛的橘子

在給定的網格中,每個單元格可以有以下三個值之一 值 0 代表空單元格 值 1 代表新鮮橘子 值 2 代表腐爛的橘子。每分鐘,任何與腐爛的橘子 在 4 個正方向上 相鄰的新鮮橘子都會腐爛。返回直到單元格中沒有新鮮橘子為止所必須經過的最小分鐘數。如果不可能,返回 1。示例 1 輸入 2,1,1 1,1,...

994 腐爛的橘子

994.腐爛的橘子 難度中等267收藏分享切換為英文接收動態反饋 在給定的網格中,每個單元格可以有以下三個值之一 每分鐘,任何與腐爛的橘子 在 4 個正方向上 相鄰的新鮮橘子都會腐爛。返回直到單元格中沒有新鮮橘子為止所必須經過的最小分鐘數。如果不可能,返回 1。示例 1 輸入 2,1,1 1,1,0...