美文网首页程序员
Python判断海域有多少个小岛

Python判断海域有多少个小岛

作者: Miku丨无形 | 来源:发表于2021-01-09 17:41 被阅读0次

    在一片大海中 有很多小岛
    我们将小岛所在的位置定义为1,海水的位置定义为0
    小岛如果上下左右相连接,那么就是一个整体
    我们要从中判断 整片海域有多少个小岛
    ["1","1","1","1","0"],

    ["1","1","0","1","0"],

    ["1","1","0","0","0"],

    ["0","0","0","0","0"]
    这就是一片海域
    可以看出里面只有一个岛屿
    我们写程序来识别一下

    首先 我们读取所有岛屿的坐标 将小岛筛选出来

    # 数据坐标存储列表
    data_1 = []
    # 将坐标添加到列表中
    for i in range(len(grid)):
        for j in range(len(grid[i])):
            if int(grid[i][j]):
                data_1.append((i, j))
    

    然后循环判断同一岛屿的坐标

    # 临时数据列表
    data_2 = []
    # 计算区域坐标
    while data_1:
        d = [data_1.pop()]
        # 处理处于同一区域的坐标
        while True:
            for i in d:
                if (i[0] + 1, i[1]) in data_1:
                    data_1.remove((i[0] + 1, i[1]))
                    d.append((i[0] + 1, i[1]))
                if (i[0] - 1, i[1]) in data_1:
                    data_1.remove((i[0] - 1, i[1]))
                    d.append((i[0] - 1, i[1]))
                if (i[0], i[1] + 1) in data_1:
                    data_1.remove((i[0], i[1] + 1))
                    d.append((i[0], i[1] + 1))
                if (i[0], i[1] - 1) in data_1:
                    data_1.remove((i[0], i[1] - 1))
                    d.append((i[0], i[1] - 1))
            if (i[0] + 1, i[1]) not in data_1 or (i[0] - 1, i[1]) not in data_1 \
                    or (i[0], i[1] + 1) not in data_1 or (i[0], i[1] - 1) not in data_1:
                break
        data_2.append(d)
    

    完整代码如下:

    # grid = [
    #
    #   ["1","1","0","0","0"],
    #
    #   ["1","1","0","0","0"],
    #
    #   ["0","0","1","0","0"],
    #
    #   ["0","0","0","1","1"]
    #
    # ]
    grid = [
    
      ["1","1","1","1","0"],
    
      ["1","1","0","1","0"],
    
      ["1","1","0","0","0"],
    
      ["0","0","0","0","0"]
    
    ]
    # 数据坐标存储列表
    data_1 = []
    # 将坐标添加到列表中
    for i in range(len(grid)):
        for j in range(len(grid[i])):
            if int(grid[i][j]):
                data_1.append((i, j))
    
    # 临时数据列表
    data_2 = []
    # 计算区域坐标
    while data_1:
        d = [data_1.pop()]
        # 处理处于同一区域的坐标
        while True:
            for i in d:
                if (i[0] + 1, i[1]) in data_1:
                    data_1.remove((i[0] + 1, i[1]))
                    d.append((i[0] + 1, i[1]))
                if (i[0] - 1, i[1]) in data_1:
                    data_1.remove((i[0] - 1, i[1]))
                    d.append((i[0] - 1, i[1]))
                if (i[0], i[1] + 1) in data_1:
                    data_1.remove((i[0], i[1] + 1))
                    d.append((i[0], i[1] + 1))
                if (i[0], i[1] - 1) in data_1:
                    data_1.remove((i[0], i[1] - 1))
                    d.append((i[0], i[1] - 1))
            if (i[0] + 1, i[1]) not in data_1 or (i[0] - 1, i[1]) not in data_1 \
                    or (i[0], i[1] + 1) not in data_1 or (i[0], i[1] - 1) not in data_1:
                break
        data_2.append(d)
    print(len(data_2))
    

    效果图如下:


    在这里插入图片描述
    在这里插入图片描述

    一起学习python,小白指导,教学分享记得私信我

    相关文章

      网友评论

        本文标题:Python判断海域有多少个小岛

        本文链接:https://www.haomeiwen.com/subject/yoncaktx.html