小学生蓝桥杯Python闯关 | 污染海域

学习Python从娃娃抓起!记录下蓝桥杯Python学习和备考过程中的题目,记录每一个瞬间。

附上汇总贴:小学生蓝桥杯Python闯关 | 汇总_COCOgsta的博客-CSDN博客


【题目描述】

有一片海域划分为N * M个方格,其中有些海域已被污染(用0表示),有些海域没被污染(用1表示)。

请问这片N * M海域中有几块是没被污染的独立海域(没被污染的独立海域是指该块海域上下左右被已污染的海域包围,且N * M以外的海域都为已被污染的海域)

例如:N=4,M=5,4 * 5的海域中,已被污染海域和没被污染的海域如下图:

这块4 * 5的海域,有3块海域(绿色)没被污染,因为每一块的上下左右都被污染的海域包围。

【输入描述】

第一行输入两个正整数N和M,N表示矩阵方格的行,M表示矩阵方格的列,N和M之间以一个英文逗号隔开;

第二行开始输入N行,每行M个数字(数字只能为1或者0,1表示没被污染的海域,0表示已被污染的海域)

【输出描述】

输出一个整数,表示N * M的海域中有几块是没被污染的独立海域

【样例输入】

4,5

1,1,0,0,0

1,0,1,0,0

1,0,0,0,0

1,1,0,1,1

【样例输出】

3

【代码详解】

N, M = [int(i) for i in input().split(",")]
ls = [[int(i) for i in input().split(',')] for i in range(N)]

v = [[0] * M for i in range(N)] #记录探索结果

def dfs(x, y):
    v[x][y] = 1
    for  dx, dy in [(0, 1), (0, -1), (1, 0), (-1, 0)]:
        xx = x + dx
        yy = y + dy
        if 0<=xx<N and 0<=yy<M and ls[xx][yy] == 1 and v[xx][yy] == 0:
            dfs(xx, yy)

cnt = 0
for i in range(N):
    for j in range(M):
        if ls[i][j] == 1 and v[i][j] == 0:
            dfs(i, j)
            cnt += 1

print(cnt)
复制代码

【运行结果】

4,5
1,1,0,0,0
1,0,1,0,0
1,0,0,0,0
1,1,0,1,1
3

猜你喜欢

转载自blog.csdn.net/guolianggsta/article/details/130541153
今日推荐