输入一个只包含0和1的二维数组,上下左右和对角相邻的1组成一个区块,0不形成区块,求数组中的区块个数。
输入格式
第一行输入两个正整数N和M,N表示数组行数,M表示数组列数。
接下来N行,每行表示数组对应的一行,每行包含M个整数,整数之间用空格隔开。
输出格式
输出一个整数,表示数组中区块的个数。
数据范围
0 ≤ N, M, N∗M ≤ 10^6
输入样例:
3 3
0 1 0
1 0 0
1 0 1
输出样例:
2
样例解释
数组右下角的1单独构成一个区块,其他的3个1对角或上下相邻,构成另一个区块。
思路一: 二维数组进行 dfs
n,m = list(map(eval,input().split(' ')))
matrix = []
for _ in range(n):
matrix += input().split(' '),
3 3
0 1 0
1 0 0
1 0 1
# 定义上下左右对角线的方位
dx = [-1, -1, -1, 0, 0