Python判断海域有多少个小岛

在一片大海中 有很多小岛
我们将小岛所在的位置定义为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,小白指导,教学分享记得私信我

猜你喜欢

转载自blog.csdn.net/Miku_wx/article/details/112095861
今日推荐