题目
给出一个m*n的矩阵,矩阵中的元素为0或1.称位置(x,y)与其上下左右四个位置(x,y+1),(x,y-1),(x+1,y),(x-1,y)是相邻的。如果矩阵中有若干个1是相邻的
(不必两两相邻),那么成这些1构成了一个“块”。求给定的矩阵中块的个数。
输入样例
6 7
0 1 1 1 0 0 1
0 0 1 0 0 0 0
0 0 0 0 1 0 0
0 0 0 1 1 1 0
1 1 1 0 1 0 0
1 1 1 1 0 0 0
输出样例
4
key
#include <iostream>
using namespace std;
int count=0;
int dx[4]= {1,-1,0,0},dy[4]= {0,0,1,-1};
int n,m,a[100][100];
int dfs(int x,int y)
{
//cout<<"("<<x<<","<<y<<")->"; //输出判断块的位置
a[x][y]=0; //访问过的标记为0
for(int i=0; i<4; i++) //上下左右四个方向进行探测
{
int x0=x,y0=y;
x0+=dx[i];
y0+=dy[i];
if(a[x0][y0]&&x0>=0&&x0<n&&y0>=0&&y0<m) //未被访问和边界条件
dfs(x0,y0);
}
}
int main()
{
cin>>n>>m; //n行m列
for(int i=0; i<n; i++)
{
for(int j=0; j<m; j++)
{
cin>>a[i][j];
}
}
for(int i=0; i<n; i++)
{
for(int j=0; j<m; j++)
{
if(a[i][j])
{
//cout<<i<<" "<<j<<endl;
count++;
dfs(i,j);
}
}
}
cout<<endl;
cout<<count<<endl;
return 0;
}