# 2030年,人类通过火星的大气进行改造,使得火星适宜居住 # 由于技术原因,无法一次进行改造,只能通过局部处理形式, # 假设待改造区域row * col 的网格有3个值,宜居区,可改造区,死亡区,使用YES、NO、NA代替 # # YES表示该网格已经完成改造 # NO表示该网格未进行改造,后期可进行改造 # NA表示死亡区,无法穿越 # # 初始化状态该区域可能存在多个宜居区,并且每个宜居区每个太阳日都可以向上下左右四个方向进行改造 # 请计算是否可以将这个待改造区域全部改造成宜居区,如果可以输出改造天数,如果不可以返回-1 # YES YES NO # NO NO NO # YES NO NO # # 输出:2 # # YES NO NO NO # NO NO NO NO # NO NO NO NO # NO NO NO NO # # 输出:6 # # YES NO NO YES # NO NO YES NO # NO YES NA NA # YES NO NA NO # 输出: -1 from queue import Queue inputList = [] while True: line = input() if line: inputList.append(line) else: break rows = len(inputList) cols = len(inputList[0].split()) gridCopy = [[None] * cols for _ in range(rows)] noNums = 0 q = Queue() # 先进先出队列 for i in range(rows): strings = inputList[i].split() gridCopy[i] = strings[:cols] noNums += strings.count("NO") for j in range(cols): if gridCopy[i][j] == "YES": q.put((i, j)) day = 0 while not q.empty() and noNums != 0: size = q.qsize() for _ in range(size): i, j = q.get() # 调用get()方法,移除并获取队列的第一个元素 directions = [[-1, 0], [1, 0], [0, -1], [0, 1]] for dir in directions: newRow = i + dir[0] newCol = j + dir[1] if ( 0 <= newRow < rows and 0 <= newCol < cols and gridCopy[newRow][newCol] == "NO" ): gridCopy[newRow][newCol] = "YES" noNums -= 1 q.put((newRow, newCol)) day += 1 print(day) if noNums == 0 else print(-1)
31.火星改造、宜居星球改造计划--队列--OD
最新推荐文章于 2024-06-08 08:13:17 发布
![](https://img-home.csdnimg.cn/images/20240711042549.png)