Description
Given a 2D grid, each cell is either a wall?2, a zombie?1?or people?0?(the number zero, one, two).Zombies can turn the nearest people(up/down/left/right) into zombies every day, but can not through wall. How long will it take to turn all people into zombies? Return?-1?if can not turn all people into zombies.
Example
Example 1:
Input:
[[0,1,2,0,0],
[1,0,0,2,1],
[0,1,0,0,0]]
Output:
2
Example 2:
Input:
[[0,0,0],
[0,0,0],
[0,0,1]]
Output:
4
思路:
這個(gè)并不是典型的BFS,而是用了多點(diǎn)擴(kuò)散方式,并且核心是找出每一次變僵尸的點(diǎn)之間的規(guī)律, 第一次只要將矩陣?yán)锼薪┦页鰜?,然后把它們周邊的人變成僵尸,第二次只要查看在第一次中變成僵尸的點(diǎn)周邊的人就可以了,因?yàn)樵嫉慕┦苓呂覀円呀?jīng)查看過,所以不需要再去理會(huì),這樣每一次只查看上一次新變的僵尸周邊還有沒有人就可以,不需要用到隊(duì)列。
還有一點(diǎn)要注意的是,循環(huán)只有在所有變成的僵尸周邊沒有人的時(shí)候停止,這樣就意味在所有人都變成僵尸后我們始終會(huì)多數(shù)一天,最終的結(jié)果需要減去這一天。
代碼:
