Python入门习题----求小岛面积

版权声明:本文为博主原创文章,转载望备明出处,谢谢! https://blog.csdn.net/Dina_p/article/details/83445724

【问题描述】

用一个二维方阵(最小为3X3,最大为9X9)表示一片海域。方阵中的元素只由0和1组成。1表示海岸线。计算由海岸线围起来的小岛面积(即:由1围起来的区域中0的个数)。如下图所示6X6方阵表示的小岛面积为9:
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 1 1
上述方阵表示的海域满足下面两个要求:
1、小岛只有一个。
2、用1表示的海岸线肯定可以封闭成一个小岛,但有可能是凸的,也有可能是凹的。所以在判断时:对于方阵中的任意一个元素0,如果其位于同一行上的两个1之间,并且位于同一列上的两个1之间,则该元素肯定在1围起来的区域中。不符合该规定的其它情况不考虑。

【输入形式】

先从标准输入中输入方阵的阶数,然后从下一行开始输入方阵的元素(只会输入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 1 1

【输出样例】

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)

提交可通过:

 

展开阅读全文

没有更多推荐了,返回首页