腐烂的橘子

题目描述

在给定的 m * n 网格 grid 中,每个单元格可以有以下三个值之一:

值 0 代表空单元格;
值 1 代表新鲜橘子;
值 2 代表腐烂的橘子。
每分钟,腐烂的橘子 周围 4 个方向上相邻 的新鲜橘子都会腐烂。

输出直到单元格中没有新鲜橘子为止所必须经过的最小分钟数。如果不可能,返回 -1 。

输入输出格式

输入格式
输入 m * n 的二维矩阵(list)。
输出格式
输出直到单元格中没有新鲜橘子为止所必须经过的最小分钟整数。

输入输出样例1

输入
[[2,1,1],[1,1,0],[0,1,1]]
输出
4

输入输出样例2

输入
[[2,1,1],[0,1,1],[1,0,1]]
输出
-1
解释(可选)
左下角的橘子(第 2 行, 第 0 列)永远不会腐烂,因为腐烂只会发生在 4 个正向上。

说明提示

grid[i][j] 仅为 0、12

grid = input()  
grid = eval(grid)
def orangesRotting(grid):  
    #********** Begin **************      
    #利用广度优先搜索实现
    direction = [[1,0],[-1,0],[0,1],[0,-1]]
    row = len(grid)  # 返回输入列表的行数  
    col = len(grid[0])  # 返回输入列表的列数
    visit = [[False] * col for i in range(row)]
    time = 0
    rotten = [[i, j, time] for i in range(row) for j in range(col) if grid[i][j] == 2]  # 返回腐烂橘子的位置
    while rotten:  # 循环腐烂橘子的位置
        i,j,time = rotten.pop(0)  # 移除列表中的第一个元素,并且返回该元素的值。
        for add_i,add_j in direction:
            if 0 <= i + add_i <= row - 1 and 0 <= j + add_j <= col - 1 and  not visit[i + add_i][j + add_j] and grid[i+add_i][j + add_j] == 1:  # 判断新鲜的橘子是否满足变为腐烂橘子的条件。
                grid[i + add_i][j + add_j] = 2  # 将新鲜的橘子变为腐烂的橘子。  
                rotten.append([i + add_i, j + add_j, time + 1])  
      # 判断列表中是否存在新鲜的橘子,如果存在则返回-1。  
    for i in range(row):  
        for j in range(col):
            if grid[i][j] == 1:  
                return -1
    return time
    #********** End ************
print(orangesRotting(grid))   

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值