输入一个只包含0和1的二维数组,上下左右和对角相邻的1组成一个区块,0不形成区块,求数组中的区块个数。
输入格式
第一行输入两个正整数N和M,N表示数组行数,M表示数组列数。
接下来N行,每行表示数组对应的一行,每行包含M个整数,整数之间用空格隔开。
输出格式
输出一个整数,表示数组中区块的个数。
代码:
#include<iostream>
using namespace std;
const int N= 1000010;
int a[ N ];
int n, m;
void dfs( int x, int y )
{
a[ x * m + y ] = 0;
for( int i = -1; i <= 1; i ++ )
for( int j = -1; j <= 1; j ++ )
{
int dx = x + i;
int dy = y + j;
if( dx < 0 || dx >= n || dy < 0 || dy >= m || a[ dx * m + dy ] == 0 ) continue;
dfs( dx, dy );
}
}
int main()
{
scanf( "%d %d", &n, &m );
for( int i = 0; i < n; i ++ )
for( int j = 0; j < m; j ++ )
{
scanf( "%d", & a[ i * m + j ]);
}
int ans = 0;
for( int i = 0; i < n; i ++ )
for( int j = 0; j < m; j ++ )
{
if( a[ i * m + j ] )
{
ans ++;
dfs( i, j );
}
}
printf( "%d\n", ans );
return 0;
}