博客
关于我
dfs算法-例题油田
阅读量:168 次
发布时间:2019-02-28

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

为了解决这个问题,我们需要计算一个网格中包含多少个不同的油藏。油藏是指相邻的油口袋,包括水平、垂直和对角线相邻的点。每个油藏的口袋数不超过100。

方法思路

  • 读取输入:首先读取输入数据,处理每个网格,直到遇到m=0,表示输入结束。
  • 初始化数据结构:使用一个二维数组来记录哪些点已经被访问过。
  • 广度优先搜索(BFS):对于每个未被访问的@点,进行BFS,将所有相连的@点标记为已访问,并计数油藏数量。
  • 输出结果:对于每个网格,输出油藏的数量。
  • 解决代码

    import sysfrom collections import dequedef main():    while True:        line = input().strip()        if not line:            continue        m, n = map(int, line.split())        if m == 0:            break        grid = []        for _ in range(m):            row = input().strip()            row = row[:n]  # 确保只取n个字符            grid.append(row)        visited = [[False for _ in range(n)] for _ in range(m)]        count = 0        for i in range(m):            for j in range(n):                if grid[i][j] == '@' and not visited[i][j]:                    queue = deque()                    queue.append((i, j))                    visited[i][j] = True                    while queue:                        x, y = queue.popleft()                        for dx in (-1, 0, 1):                            for dy in (-1, 0, 1):                                if dx == 0 and dy == 0:                                    continue                                nx = x + dx                                ny = y + dy                                if 0 <= nx < m and 0 <= ny < n:                                    if grid[nx][ny] == '@' and not visited[nx][ny]:                                        visited[nx][ny] = True                                        queue.append((nx, ny))                    count += 1        print(count)if __name__ == "__main__":    main()

    代码解释

  • 读取输入:使用循环读取每个网格的尺寸m和n,直到遇到m=0。
  • 读取网格数据:对于每个网格,读取m行数据,并确保每行有n个字符。
  • 初始化访问数组:创建一个二维布尔数组visited,记录哪些点已经被访问过。
  • BFS遍历:对于每个未被访问的@点,使用BFS标记所有相连的@点,并计数油藏数量。
  • 输出结果:处理完每个网格后,输出油藏数量。
  • 这个方法确保了每个油口袋都被正确地标记和计数,处理了所有可能的相邻情况,包括对角线。

    转载地址:http://nztj.baihongyu.com/

    你可能感兴趣的文章
    python读取文本文件数据
    查看>>
    python | Python mock对象与测试替身
    查看>>
    python | Python pandas实现数据追加和合并的最佳方法
    查看>>
    python | Python 中检查一个数字是否是三态数
    查看>>
    python | Python 蒙特卡洛模拟
    查看>>
    python | python-docx,一个超厉害的 Python 库!
    查看>>
    python | Python中使用@property装饰器
    查看>>
    python | Python中的functools模块高级应用
    查看>>
    python | Python中的itertools模块使用技巧
    查看>>
    python | Python中的事件驱动编程模型
    查看>>
    python | Python中的内存池与缓存机制
    查看>>
    python | Python中的弱引用与内存管理
    查看>>
    python | Python中的类多态:方法重写和动态绑定
    查看>>
    python | Python作用域链查找机制
    查看>>
    python | Python俄罗斯方块游戏详解
    查看>>
    python | Python动态代码执行:exec和compile函数
    查看>>
    Python读取文件数据进行数据图形化展示
    查看>>
    python | Python反向迭代:reversed实现机制
    查看>>
    python | Python开发必知的数据容器用法(建议收藏!)
    查看>>
    python读取文件夹下文件名称_如何在Python目录中获取文件名列表
    查看>>