首页 > 其他分享 >【DFS深度优先搜索】纵火犯

【DFS深度优先搜索】纵火犯

时间:2024-09-18 16:48:30浏览次数:3  
标签:__ 优先 max DFS 纵火犯 草坪 grid dfs size

【问题描述】

给你一块n*m的草坪,问如果只点一次火,最多能烧多少块草坪。可以从n*m的草地中任意一个地方开始点火,火只能往上下左右传递,没有草的地方不能燃烧。

【输入格式】

输入由多个测试例组成。每个测试例的第一行含两个整数n和m, (1 <=n,m<=100), 分别表示01矩阵的行数与列数,

后面紧跟着n行,每行含m个整数0或1,1代表草坪,0表示啥也没有,相邻两个整数之间用一个空格隔开,两个测

试例之间用一个空行隔开,最后一个测试例之后隔一个空行,最后一行含有两个整数0,表示输入结束。

【输出格式】

每个测试例对应一行输出,含一个整数,表示只点一次火最多能烧的草坪个数。

【样例输入】

5 6

0 1 1 0 0 1

1 1 0 1 0 1

0 1 0 0 1 0

0 0 0 1 1 1

1 0 1 1 1 0

0 0

【样例输出】

7

【解题思路】

  1. 遍历整个草坪:你可以从矩阵中的任意一个点开始,找到所有为1(代表草坪)的起点。

  2. 使用DFS搜索连通区域:当找到一个草坪点(值为1)时,使用DFS递归地搜索它的上下左右四个方向,寻找所有连接在一起的草坪。对于已经访问过的点,标记为已访问(或者直接修改矩阵值为0),避免重复计算。

  3. 计算连通块的大小:每次执行DFS时,记录连通块的大小(即能烧掉的草坪数量)。

  4. 更新最大值:遍历所有可能的起点,找到最大的连通块大小,即为一次点火能烧掉的最多草坪数。

【题解】

def dfs(grid, x, y, n, m):
    if x < 0 or y < 0 or x >= n or y >= m or grid[x][y] == 0:
        return 0

    grid[x][y] = 0

    size = 1

    size += dfs(grid, x + 1, y, n, m)
    size += dfs(grid, x - 1, y, n, m)
    size += dfs(grid, x, y + 1, n, m)
    size += dfs(grid, x, y - 1, n, m)

    return size


def max_area(n, m, grid):
    max_ = 0
    for i in range(n):
        for j in range(m):
            if grid[i][j] == 1:
                max_ = max(max_, dfs(grid, i, j, n, m))
    return max_


if __name__ == '__main__':
    while True:
        n, m = map(int, input().split())

        if n == 0 and m == 0:
            break

        grid = []
        for _ in range(n+1):
            grid.append(list(map(int, input().split())))

        result = max_area(n, m, grid)
        print(result)

标签:__,优先,max,DFS,纵火犯,草坪,grid,dfs,size
From: https://blog.csdn.net/2301_80582866/article/details/142337978

相关文章

  • c# 在PDFsharp里绘制ZXing生成的条形码矢量图
    PDFsharp支持在pdf文档里生成矢量格式的二维码,单支持的条码格式比较少,不支持常用的93码和二维码等。ZXing支持的条码多,但无法在PDFsharp里直接绘制矢量格式的图形。这里一个扩展就可以 在PDFsharp里绘制ZXing生成的条形码矢量图了。使用方法:usingPdfSharp.Drawing;using......
  • 六种主流ETL工具的比较与Kettle的实践练习指南--MySQL、hive、hdfs等之间的数据迁移
            在数据集成和数据仓库建设中,ETL(Extract,Transform,Load)工具扮演着至关重要的角色。本文将对六种主流ETL工具进行比较,并深入探讨Kettle的实践应用。一、六种主流ETL工具比较1.DataPipeline设计及架构:专为超大数据量、高度复杂的数据链路设计的灵活、可扩......
  • Hadoop(十一)HDFS 读写数据流程
    HDFS读写数据流程一、写数据流程1、客户端通过DistributedFileSystem模块向NameNode请求上传文件,NameNode检查目标文件是否已存在,父目录是否存在2、NameNode返回是否可以上传3、客户端请求第一个Block上传到哪几个DataNode服务器上4、NameNode返回3个DataNode节点,分别为dn1......
  • 【数据结构与算法 | 灵神题单 | 自底向上DFS篇】力扣965, 2331, 100, 1379
    1.力扣965:单值二叉树1.1题目:如果二叉树每个节点都具有相同的值,那么该二叉树就是单值二叉树。只有给定的树是单值二叉树时,才返回 true;否则返回 false。示例1:输入:[1,1,1,1,1,null,1]输出:true示例2:输入:[2,2,2,5,2]输出:false提示:给定树的节点数范围是 [1,......
  • 【数据结构与算法 | 灵神题单 | 自顶向下DFS篇】力扣1022,623
    1.力扣1022:从根到叶的二进制之和1.1题目:给出一棵二叉树,其上每个结点的值都是 0 或 1 。每一条从根到叶的路径都代表一个从最高有效位开始的二进制数。例如,如果路径为 0->1->1->0->1,那么它表示二进制数 01101,也就是 13 。对树上的每一片叶子,我们都要找出......
  • 搜索 DFS深度优先搜索
    洛谷P1363幻象迷宫这种恶魔样例究竟是哪个天才想出来的?!!!!!!620#.##.##.##.##.##.##.#.##.##.##.##.##.##.#.##.##.##.##.##.##.S.#..#..#..#..#..#..##..#..#..#..#..#..##..#..#..#..#..#..##md,交了好几发都没过,看了一下这个样例,心都凉了。能想出来这题解的更是天才Orz......
  • Android HandlerThread Post后延迟7秒才执行的原因及解决方案|如何提高Android后台线程
    在Android开发中,HandlerThread是用于处理后台线程任务的常见工具。然而,有时我们会遇到这样的问题:当任务通过HandlerThread的post方法发送后,任务的执行时间会出现明显的延迟,比如7秒的延迟才执行任务。本文将深入分析这种问题的成因,探讨可能的影响因素,并提供多种优化方案,帮助开发者解......
  • dfs与贪心算法——洛谷5194
    问题描述:有n个砝码,将砝码从大到小排列,从第三个砝码开始,所有砝码均大于其前两个砝码之和,问怎样的砝码组合才可以组合出不大于c的最大重量,输出该重量输入:第一行输入两个个整数N,c,代表有N个砝码,第二行输入N个砝码的质量输出:不大于c的最大重量题目分析:要找到不大于c的最大重量,要......
  • 【洛谷 P1596】[USACO10OCT] Lake Counting S 题解(深度优先搜索)
    [USACO10OCT]LakeCountingS题面翻译由于近期的降雨,雨水汇集在农民约翰的田地不同的地方。我们用一个的网格图表示。每个网格中有水(W)或是旱地(.)。一个网格与其周围的八个网格相连,而一组相连的网格视为一个水坑。约翰想弄清楚他的田地已经形成了多少水坑。给出约翰田地的示意图,......
  • dfs 验证搜索二叉树——leetcode98
    代码来自leetcode官方一开始我自己写这个代码时只注意当前节点是否会存在空指针,并没有注意到他的孩子节点也有可能为空,绕了我好久。。。。。。/***Definitionforabinarytreenode.*structTreeNode{*intval;*TreeNode*left;*TreeNode*right;......