给定一个
的网格,其中每个单元格中可能有三种值中的一个 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 }