598. Zombie in Matrix

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

思路:

这个并不是典型的BFS,而是用了多点扩散方式,并且核心是找出每一次变僵尸的点之间的规律, 第一次只要将矩阵里所有僵尸找出来,然后把它们周边的人变成僵尸,第二次只要查看在第一次中变成僵尸的点周边的人就可以了,因为原始的僵尸周边我们已经查看过,所以不需要再去理会,这样每一次只查看上一次新变的僵尸周边还有没有人就可以,不需要用到队列。

还有一点要注意的是,循环只有在所有变成的僵尸周边没有人的时候停止,这样就意味在所有人都变成僵尸后我们始终会多数一天,最终的结果需要减去这一天。

代码:


你可能感兴趣的:(598. Zombie in Matrix)