864. 二维数组区块计数
输入一个只包含0和1的二维数组,上下左右和对角相邻的1组成一个区块,0不形成区块,求数组中的区块个数。
输入格式
第一行输入两个正整数N和M,N表示数组行数,M表示数组列数。
接下来N行,每行表示数组对应的一行,每行包含M个整数,整数之间用空格隔开。
输出格式
输出一个整数,表示数组中区块的个数。
数据范围
0≤N,M,N∗M≤1060≤N,M,N∗M≤106
输入样例:
3 3
0 1 0
1 0 0
1 0 1
输出样例:
2
样例解释
数组右下角的1单独构成一个区块,其他的3个1对角或上下相邻,构成另一个区块。
思路:
直接bfs,染色找。
代码:
#include <iostream>
#include <string>
#include <vector>
#include <cstdio>
#include <algorithm>
#include <vector>
#include <map>
#include <queue>
using namespace std;
#define ll long long
const ll mod = 1e9 + 7;
const int INF = 0x3f3f3f3f;
const int maxn = 1e6+100;
in