964: 数细胞
题目描述
一矩形阵列由数字0到9组成,数字1到9代表细胞,细胞的定义为沿细胞数字上下左右还是细胞数字则为同一细胞,求给定矩形阵列的细胞个数。
输入
第一行输入两个整数,分别代表矩阵的行和列 输入m*n的矩阵,由数字0到9组成。
输出
细胞个数。
样例输入
4 10
1 2 3 4 5 1 1 1 6 7
1 0 3 4 5 6 1 5 1 0
2 0 4 5 6 6 1 6 7 1
0 0 6 0 6 6 1 0 8 9
样例输出
1
题意: 相邻非零元素的区域个数
0 1 3 4 0 0
2 5 0 0 5 0
0 0 7 8 0 0
0 0 0 0 0 9
细胞的数量为4个
思路: 判断每一个非零元素,再递归搜索其上下左右的元素,非零继续搜索否则回溯
#include<iostream>
# define size 50
using namespace std;
int data[size][size],line,Rank;
void dfs(int n,int m)
{
if(n<0||n>line-1) return;
else if(m<0||m>Rank-1) return; //超过边界退回
else if(data[n][m]!=0)
{
data[n][m]=0; //搜过的赋值为零
dfs(n+1,m);
dfs(n-1,m);
dfs(n,m+1);
dfs(n,m-1); // 继续搜索上下左右
}
else if(data[n][m]==0) return; //为零则退回
}
int main()
{
cin >> line >> Rank;
for(int i=0;i<line;i++)
{
for(int j=0;j<Rank;j++)
{
cin >> data[i][j];
}
}
int num=0;
for(int i=0;i<line;i++)
{
for(int j=0;j<Rank;j++)
{
if(data[i][j]!=0)
{
num++; //计数
dfs(i,j);
}
}
}
cout << num;
return 0;
}