欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 新闻 > 资讯 > 【蓝桥杯】12111暖气冰场(多源BFS 或者 二分)

【蓝桥杯】12111暖气冰场(多源BFS 或者 二分)

2025/12/14 8:42:59 来源:https://blog.csdn.net/2301_77168269/article/details/146448138  浏览:    关键词:【蓝桥杯】12111暖气冰场(多源BFS 或者 二分)

在这里插入图片描述

思路

这题可以用BFS做,也可以用二分来做。
用二分这里只提供一个思路:对时间来二分查找,check函数就是检查在特定的时间 t 0 t_0 t0内每一个暖气炉的传播距离能否覆盖所有格子。
用BFS做:
由几个点开始向外扩散,知道铺满整个面。可以用BFS来做,原本的BFS是从一个点开始加入deque,多源BFS那现在就先把所有的暖气炉加入deque,再遍历就行了。
还有一个注意点,题目的输出是花了多少时间,也就是扩散的轮数,我们可以用距离来度量时间,一秒钟一格,所以我们时刻更新所出现的距离暖气炉最远的距离即可。我们把vis标记数组替换为dis数组 兼具判断是否遍历和记录距离的作用。

code

import os
import sys
from collections import dequen,m,t = map(int,input().split())
q = deque()
dis = [[-1 for i in range(m+1)] for j in range(n+1)]
for i in range(t):x,y = map(int,input().split())q.append([x,y])dis[x][y] = 0ans = 0
while len(q)!=0:x,y = q.popleft()for dx,dy in [(-1,0),(+1,0),(0,-1),(0,+1),(-1,-1),(-1,+1),(+1,-1),(+1,+1)]:nx,ny = x+dx,y+dyif 1<=nx<=n and 1<=ny<=m:if dis[nx][ny]==-1:q.append([nx,ny])dis[nx][ny] = dis[x][y] + 1ans = max(ans,dis[nx][ny])print(ans)

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词