Python 海域面积计算:用二维方阵表示海域,计算水面面积

使用 Python 语言编程,用一个二维方阵(最小为 3X3,最大为 9X9)表示一片海域。方阵中的元素只由 0 和 1 组成,1 表示海岸线。计算水面面积(即:不在 1 围起来的区域中 0 的个数)。

例如,以下 6X6 方阵表示的海域水面面积为 14:

0 0 0 1 0 0
0 0 1 0 1 0
0 1 0 0 0 1
1 0 0 0 1 0
1 0 1 0 1 0
1 1 0 1 0 0

上述方阵表示的海域满足下面两个要求:

  1. 小岛只有一个。
  2. 用 1 表示的海岸线是封闭的,但有可能是凸的,也有可能是凹的。

思路:

从任意一点开始递归,将连通块上的元素全部标记为 1,然后从下一个未标记的点开始继续递归,每一次递归都将标记到的点数加 1,最后用总点数减去标记的点数就是水面面积。需要注意的是,由于一个点可能被多次递归到,所以需要在递归标记时判断该点是否已经被标记过。

代码:

# 获取方阵的阶数
n = int(input())

# 创建一个二维方阵存储海域信息
matrix = []
for i in range(n):
    row = list(map(int, input().split()))
    matrix.append(row)

# 标记数组,用于记录每个点是否已经被标记过
marked = [[False for _ in range(n)] for _ in range(n)]

# 递归函数,用于标记连通块
def mark_connected(row, col):
    if row < 0 or row >= n or col < 0 or col >= n or matrix[row][col] == 1 or marked[row][col]:
        return
    marked[row][col] = True
    mark_connected(row - 1, col)
    mark_connected(row + 1, col)
    mark_connected(row, col - 1)
    mark_connected(row, col + 1)

# 计算水面面积
water_area = 0
for i in range(n):
    for j in range(n):
        if matrix[i][j] == 0 and not marked[i][j]:
            mark_connected(i, j)
            water_area += 1

# 输出水面面积
print(water_area)

输入形式:

先从标准输入中输入方阵的阶数,然后从下一行开始输入方阵的元素(只会输入 0 或 1),各元素之间以一个空格分隔,每行最后一个元素后没有空格,但会有回车换行符。

输出形式:

在标准输出上输出用整数表示的水面面积。

输入样例:

6
0 0 0 1 0 0
0 0 1 0 1 0
0 1 0 0 0 1
1 0 0 0 1 0
1 0 1 0 1 0
1 1 0 1 0 0

输出样例:

14

样例说明:

输入是 6X6 的方阵。该方阵中不在 1 围起来的区域中 0 的个数为 14,所以输出的小岛面积为 14。注意:最下方的三个元素 1(即第 5 行第 3 列的 1、第 6 行第 2 列的 1、第 6 行第 4 列的 1)组成了一个凹形的海岸线,第 6 行第 3 列的 0 不在海岸线内,所以应算作水面面积。

Python 海域面积计算:用二维方阵表示海域,计算水面面积

原文地址: https://www.cveoy.top/t/topic/oB2h 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录