A38906. (注input()输入函数的括号中不允许添加任何信息)编程实现有一片海域划分为N*M个方格,其中有些海域已被污染(用0表示),有些海域没被污染(用1表示)。请问这片N*M海域中有几块是没被污染的独立海域(没被污染的独立海域是指该块海域上下左右被已污染的海域包围,且N*M以外的海域都为已被污染的海域)例如:N=4,M=5,4*5的海域中,已被污染海域和没被污染的海域如下图:这块4*5的海域…
填空题
困难
知识点
题目描述
题目描述
(注input()输入函数的括号中不允许添加任何信息)
编程实现
有一片海域划分为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的海域中有几块是没被污染的独立海域
参考答案
n, m = map(int, input().split(','))
ls = []
for i in range(n):
ls.append(list(map(int, input().split(','))))
def dfs(ls, i, j):
if (not 0 <= i < n) or (not 0 <= j < m) or ls[i][j] == 0:
return
ls[i][j] = 0
dfs(ls, i - 1, j)
dfs(ls, i + 1, j)
dfs(ls, i, j - 1)
dfs(ls, i, j + 1)
ans = 0
for i in range(n):
for j in range(m):
if ls[i][j] == 1:
ans += 1
dfs(ls, i, j)
print(ans)
上一题
下一题