美文网首页程序员
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判断海域有多少个小岛

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

  • python的库有多少个?python有多少个模块?

    这里列举了大概500个左右的库: ! Chardet字符编码探测器,可以自动检测文本、网页、xml的编码。 col...

  • Python100例--012

    题目:判断101-200之间有多少个素数,并输出所有素数。

  • 2018史上最全的厦门旅拍婚纱照攻略,包含详解景点行程美食篇!

    厦门市由厦门本岛、鼓浪屿及其众多小岛屿和同安、集美、海沧、翔安等组成,陆地面积有1699.39平方公里,海域面积有...

  • 判断101~200有多少个素数

    题目解析: 用一个数分别去除2(2除外),一直除到这个数的前一位。如果能被整除怎说明是素数,否则不是素数 具体代码...

  • 【题目02】判断素数

    【程序2】题目:判断101-200之间有多少个素数,并输出所有素数。

  • 嵛山岛的美与众不同

    嵛山岛在福鼎东南海域,距大陆半小时航程。小岛上有两个淡水湖泊,叫天湖。嵛山岛上有湖有山有海有草原,这种海岛奇观并不...

  • Python编程思想是什么?

    我们在接触Python的过程中,一定会了解到Python的编程思想,那么Python的编程思想是什么呢?有多少个呢...

  • day6

    题目:判断101-200之间有多少个素数,并输出所有素数。 one: #include #include

  • 社区小岛趋势判断

    #简书小岛发帖门槛 小岛类似于其他社区的帖子集聚地,比如在头条是以“小组”的形式存在,不同的是话题联动方式不同,头...

网友评论

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

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