博客
关于我
浙江农林大学第十九届程序设计竞赛暨天梯赛选拔赛 灾难预警 (二分+bfs)
阅读量:742 次
发布时间:2019-03-21

本文共 1919 字,大约阅读时间需要 6 分钟。

为了解决农农在浙农林大学行走时不踩进水坑的问题,我们需要设计一个程序来判断他能否在给定的水位下安全地从起点 (1, 1) 到达终点 (n, n)。我们可以使用二分查找配合广度优先搜索(BFS)来高效解决这个问题。

方法思路

  • 问题分析:农农只能在不形成水坑的地方行走。水坑的形成条件是海拔高度大于当前水位。因此,我们需要找到最大的水位X,使得在X下可以从起点到达终点。
  • 二分查找:使用二分查找来确定这个最大的X值。我们通过检查每个中间值mid来确定是否能从起点到终点走过。
  • 广度优先搜索(BFS):检查当前水位是否可以让农农通过某些路径到达终点。BFS适合用来确定图中是否存在一条可行路径。
  • 解决代码

    import sysfrom collections import dequedef main():    data = list(map(int, sys.stdin.read().split()))    ptr = 0    n = data[ptr]    ptr += 1    a = []    for i in range(n):        row = data[ptr:ptr + n]        ptr += n        a.append(row)        def check(mid):        visited = [[0] * (n + 1) for _ in range(n + 1)]        q = deque()        q.append((1, 1))        visited[1][1] = 1        if a[1][1] > mid or a[n][n] > mid:            return False        if n == 1:            return True        directions = [(-1, 0), (1, 0), (0, -1), (0, 1)]        while q:            x, y = q.popleft()            for dx, dy in directions:                nx = x + dx                ny = y + dy                if 1 <= nx <= n and 1 <= ny <= n:                    if not visited[nx][ny] and a[nx][ny] <= mid:                        if nx == n and ny == n:                            return True                        visited[nx][ny] = 1                        q.append((nx, ny))        return False    low = 1    high = 100000    max_X = 0    while low <= high:        mid = (low + high) // 2        can = check(mid)        if can:            max_X = mid            low = mid + 1        else:            high = mid - 1    q_num = data[ptr]    ptr += 1    for _ in range(q_num):        x = data[ptr]        ptr += 1        if x <= max_X:            print("Wuhu")        else:            print("Hmmm")if __name__ == "__main__":    main()

    代码解释

  • 读取输入:使用sys.stdin.read来高效读取所有输入数据,并将其转换为整数列表进行处理。
  • 二分查找:确定最大的可达水位X。初始范围为1到100000,逐步调整范围遍历每个中间值mid。
  • 检查函数(BFS):对于给定的mid值,使用BFS检查是否能从起点到达终点。所有海拔高度必须不大于mid。
  • 处理查询:对于每个查询,比较当前水位和找到的最大X值,输出相应的结果。
  • 转载地址:http://hpzgz.baihongyu.com/

    你可能感兴趣的文章
    Nginx配置参数中文说明
    查看>>
    Nginx配置好ssl,但$_SERVER[‘HTTPS‘]取不到值
    查看>>
    Nginx配置实例-负载均衡实例:平均访问多台服务器
    查看>>
    Nifi同步过程中报错create_time字段找不到_实际目标表和源表中没有这个字段---大数据之Nifi工作笔记0066
    查看>>
    NIFI大数据进阶_离线同步MySql数据到HDFS_02_实际操作_splitjson处理器_puthdfs处理器_querydatabasetable处理器---大数据之Nifi工作笔记0030
    查看>>
    NIFI大数据进阶_连接与关系_设置数据流负载均衡_设置背压_设置展现弯曲_介绍以及实际操作---大数据之Nifi工作笔记0027
    查看>>
    NIO ByteBuffer实现原理
    查看>>
    Nio ByteBuffer组件读写指针切换原理与常用方法
    查看>>
    NIO Selector实现原理
    查看>>
    nio 中channel和buffer的基本使用
    查看>>
    NIO基于UDP协议的网络编程
    查看>>
    NISP一级,NISP二级报考说明,零基础入门到精通,收藏这篇就够了
    查看>>
    Nitrux 3.8 发布!性能全面提升,带来非凡体验
    查看>>
    NI笔试——大数加法
    查看>>
    NLog 自定义字段 写入 oracle
    查看>>
    NLP 基于kashgari和BERT实现中文命名实体识别(NER)
    查看>>
    NLP 项目:维基百科文章爬虫和分类【01】 - 语料库阅读器
    查看>>
    NLP_什么是统计语言模型_条件概率的链式法则_n元统计语言模型_马尔科夫链_数据稀疏(出现了词库中没有的词)_统计语言模型的平滑策略---人工智能工作笔记0035
    查看>>
    NLP学习笔记:使用 Python 进行NLTK
    查看>>
    NLP问答系统:使用 Deepset SQUAD 和 SQuAD v2 度量评估
    查看>>