其他分享
首页 > 其他分享> > 腐烂的橘子

腐烂的橘子

作者:互联网

使用广度遍历实现该算法,时间复杂度为O(row*col),空间复杂度为O(row*col),

class Solution {
    public int orangesRotting(int[][] grid) {
    //记录橘子的位置
        Deque<Integer> rq=new LinkedList<>();
        Deque<Integer> cq=new LinkedList<>();
        int row=grid.length;
        int col=grid[0].length;
        //该橘子能够感染的所有路径
        int[][] orient={{1,0},{-1,0},{0,1},{0,-1}};
        //找出感染的橘子,加入队列
        for(int i=0;i<row;i++){
            for(int j=0;j<col;j++){
                if(grid[i][j]==2){
                    rq.add(i);
                    cq.add(j);
                }
            }
        }
        //时间
        int minute=0;
        while(rq.size()!=0&&cq.size()!=0){
        //进行广度遍历,设置标志位
            int lr=rq.size();
            int flag=0;
            for(int f=0;f<lr;f++){
                int r=rq.poll();
                int c=cq.poll();
                for(int i=0;i<4;i++){
                    int tmpr=r+orient[i][0];
                    int tmpc=c+orient[i][1];
                    //判断是否溢出
                    if(tmpr<row&&tmpr>=0&&
                        tmpc<col&&tmpc>=0){
                        if(grid[tmpr][tmpc]==1){
                            grid[tmpr][tmpc]=2;
                            rq.add(tmpr);
                            cq.add(tmpc);
                            flag=1;
                        }
                    }
                }
            }
            if(flag==1)minute++;
        }
        //判断当前是否还有没有被感染的橘子
        for(int i=0;i<row;i++){
            for(int j=0;j<col;j++){
                if(grid[i][j]==1){
                    return -1;
                }
            }
        }
        return minute;
    }
}

标签:int,tmpc,腐烂,grid,橘子,tmpr,row
来源: https://blog.csdn.net/qq_43641886/article/details/104648301