计算海域水面面积 - Python 代码实现
计算海域水面面积 - Python 代码实现
本代码使用 Python 语言实现计算海域水面面积的功能。输入一个二维方阵(3x3 到 9x9)表示海域,其中 '1' 代表海岸线,'0' 代表水面。程序根据海岸线形状计算水面面积并输出结果。
问题描述
用一个二维方阵(最小为 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 表示的海岸线是封闭的,但有可能是凸的,也有可能是凹的。
算法思路
对于方阵中的任意一个元素 0,如果其位于同一行上的两个 1 之间,并且位于同一列上的两个 1 之间,则该元素肯定在 1 围起来的区域中。否则就不在 1 围起来的区域中,即属于水面。
代码实现
n = int(input())
area = []
for i in range(n):
row = input().split()
area.append([int(x) for x in row])
# 找到最左边和最右边的 1
left, right = n-1, 0
for i in range(n):
for j in range(n):
if area[i][j] == 1:
left = min(left, j)
right = max(right, j)
# 找到最上面和最下面的 1
top, bottom = n-1, 0
for i in range(n):
for j in range(n):
if area[i][j] == 1:
top = min(top, i)
bottom = max(bottom, i)
# 计算水面面积
water = 0
for i in range(n):
for j in range(n):
if area[i][j] == 0 and (i < top or i > bottom or j < left or j > right):
water += 1
print(water)
输入形式
先从标准输入中输入方阵的阶数,然后从下一行开始输入方阵的元素(只会输入 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 不在海岸线内,所以应算作水面面积。
原文地址: https://www.cveoy.top/t/topic/oB3k 著作权归作者所有。请勿转载和采集!