给定一个
的网格,其中每个单元格中可能有三种值中的一个 0 , 1 , 2。
其中 0 表示这个格子为空、1 表示这个格子有一个完好的苹果,2 表示这个格子有一个腐烂的苹果。
腐烂的苹果每分钟会向上下左右四个方向的苹果传播一次病菌,并导致相邻的苹果腐烂。请问经过多少分钟,网格中不存在完好的苹果。如果有苹果永远不会腐烂则返回 -1。
数据范围:
,网格中的值满足
[[2,1,1],[1,0,1],[1,1,1]]
4
[[2,1,0],[1,0,1],[0,0,0]]
-1
package main
import "strconv"
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param grid int整型二维数组
* @return int整型
*/
func rotApple( grid [][]int ) int {
n,m:=len(grid),len(grid[0])
vis:=map[string]bool{}
q:=[][]int{}
for i:=0;i<n;i++{
for j:=0;j<m;j++{
if grid[i][j]==2{
q=append(q,[]int{i,j})
}
if grid[i][j]==1{
k:=strconv.Itoa(i)+"-"+strconv.Itoa(j)
vis[k]=true
}
}
}
dirs:=[][]int{[]int{1,0},[]int{-1,0},[]int{0,1},[]int{0,-1}}
cnt:=0
for len(q)>0{
new_q:=[][]int{}
for _,qi:=range q{
for _,dir:=range dirs{
x,y:=qi[0]+dir[0],qi[1]+dir[1]
if x>=0&&x<n&&y>=0&&y<m&&grid[x][y]==1{
grid[x][y]=2
k:=strconv.Itoa(x)+"-"+strconv.Itoa(y)
delete(vis,k)
new_q=append(new_q,[]int{x,y})
}
}
}
if len(new_q)>0{
cnt++
}
q=new_q
}
if len(vis)>0{
return -1
}
return cnt
}