连通块题目
题目描述
一矩形阵列由数字0到9组成,数字1到9代表细胞,细胞的定义为沿细胞数字上下左右若还是细胞数字则为同一细胞,求给定矩形阵列的细胞个数。(1<=m,n<=100)?
输入格式
输入:整数m,n(m行,n列)
矩阵
输出格式
输出:细胞的个数
输入输出样例
输入 #1
4 10
0234500067
1034560500
2045600671
0000000089
输出
#1
4
#include<iostream>
using namespace std;
char str[505][505];
int N,M,ans=0;
int dir[4][2]={{0,1},{-1,0},{0,-1},{1,0}};
// 右方 右上方 上方 左上 左方 左下 下方 右下
void dfs(int a,int b)
{
str[a][b]='0';
for(int m=0; m<4; m++)
{
int x=dir[m][0]+a;
int y=dir[m][1]+b;
if(x>=1&&x<=N && y>=1&&y<=M && str[x][y]!='0')
{
dfs(x,y);
}
}
return ;
}
int main()
{
cin>>N>>M;
for(int i=1; i<=N; i++ )
{
for(int j=1; j<=M; j++)
{
cin>>str[i][j];
}
}
for(int i=1; i<=N; i++ )
{
for(int j=1; j<=M; j++)
{
if(str[i][j]!='0')//当发现1-9时说明这里有细胞,然后开始搜索把同一个细胞全部遍历
{
dfs(i,j);
ans++;
}
}
}
cout<<ans;
return 0;
}