【问题描述】 用一个二维方阵(最小为3X3,最大为9X9)表示一片海域。方阵中的元素只由0和1组成。1表示海岸线。计算由海岸线围起来的小岛面积(即:由1围起来的区域中0的个数)。如下图所示6X6方阵表示的小岛面积为9: 【输入形式】 先从标准输入中输入方阵的阶数,然后从下一行开始输入方阵的元素(只会输入0或1),各元素之间以一个空格分隔,每行最后一个元素后没有空格,但会有回车换行符。 【输出形式】 在标准输出上输出用整数表示的小岛面积。 【输入样例】 6 【输出样例】 9 【样例说明】 输入是6X6的方阵。该方阵中由1围起来的区域内有9个0,所以输出的小岛面积为9。注意:最下方的三个元素1(即第5行第3列的1、第6行第2列的1、第6行第4列的1)组成了一个凹形的海岸线,第6行第3列的0不在海岸线内,所以不应算作小岛面积。 |
参考代码:
"""
Created on Wed Oct 27 13:46:42 2018
@author: Dina
"""
N = int(input())
squareList = []
for i in range(N):
temp = list(map(int,input().split())) # 把读入的 0和1 都转换为 int 类型
squareList.append(temp) # 把每一行输入的添加到
count = 0
for i in range(N):
for j in range(1,N):
flg1,flg2,flg3,flg4 = 0,0,0,0
if squareList[i][j] == 0 :
# 查找一下 某个 0 的左方(同一行上的左方)是否有一个 1
for m in range(j):
if squareList[i][m] == 1:
flg1 = 1
break
# 查找一下 某个 0 的右方(同一行上的右方)是否有一个 1
for m in range(j+1,N):
if squareList[i][m] == 1:
flg2 = 1
break
# 查找一下 某个 0 的上方(同一列上的上方)是否有一个 1
for n in range(i):
if squareList[n][j] == 1:
flg3 = 1
break
# 查找一下 某个 0 的下方(同一列上的下方)是否有一个 1
for n in range(i+1,N):
if squareList[n][j] == 1:
flg4 = 1
break
# 若某个 0 的 左正方,右正方,上正方,下正方,都有 1 的话,那么面积就加一
if flg1 == 1 and flg2 == 1 and flg3 == 1 and flg4 == 1 :
count += 1
print(count)
提交可通过: