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