题解 | 腐烂的苹果(广度优先算法)
腐烂的苹果
https://www.nowcoder.com/practice/54ab9865ce7a45968b126d6968a77f34
import java.util.*; public class Solution { /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param grid int整型ArrayList<ArrayList<>> * @return int整型 */ public int rotApple (ArrayList<ArrayList<Integer>> grid) { //上下左右 int []dx={0,0,-1,1}; int []dy={-1,1,0,0}; int ret=0; int m=grid.size(); int n=grid.get(0).size(); boolean vis[][]=new boolean[m][n]; LinkedList<int []>queue=new LinkedList<>(); for(int i=0;i<m;i++){ for(int j=0;j<n;j++){ if(grid.get(i).get(j)==2){ queue.add(new int[]{i,j}); } } } while(!queue.isEmpty()){ int sz=queue.size(); while(sz--!=0){ int []t=queue.poll(); int a=t[0],b=t[1];//x,y for(int i=0;i<4;i++){ int x=a+dx[i],y=b+dy[i]; if(x>=0&&x<m&&y>=0&&y<n&&!vis[x][y]&&grid.get(x).get(y)==1){ vis[x][y]=true; queue.add(new int[]{x,y}); } } } ret++; } for(int i=0;i<m;i++){ for(int j=0;j<n;j++){ if(grid.get(i).get(j)==1&&!vis[i][j]){ return -1; } } } return ret-1; } }