Description
一矩形阵列由数字0到9组成,数字1到9代表细胞,细胞的定义为沿细胞数字上下左右还是细胞数字则为同一细胞,求给定矩形阵列的细胞个数。如:阵列
0234500067
1034560500
2045600671
0000000089
有4个细胞。
Input
输入共m+1行第一行有两个数据,分别表示总行数和总列数以下的m行,每行有n个0-9之间的数
Output
细胞个数
Sample Input
4
0234500067
1034560500
2045600671
0000000089
Sample Output
4
分析
这题一眼看像用DFS。循环过一遍,找到一个不是0的就进去搜索,把那一块都变成0,ans++。等所有变成零之后结束。当然BFS也可以,但我没有选用。
特别注意:输入用的是字符不是数字,看到两字符之间没有空格了没?!
代码
#include<iostream>
#include<cstdio>
using namespace std;
int n,m,ans;
char a[101][101];
int dx[5]={0,1,0,-1,0};
int dy[5]={0,0,1,0,-1};
void dfs(int x,int y)
{
for(int i=1;i<=4;i++)
{
if(x+dx[i]>0&&x+dx[i]<=n&&y+dy[i]>0&&y+dy[i]<=m&&a[x+dx[i]][y+dy[i]]>'0')
{
a[x+dx[i]][y+dy[i]]='0';
dfs(x+dx[i],y+dy[i]);
}
}
}
int main()
{
cin>>n>>m;
for(int i=1;i<=n;i++)
{
for(int j=1;j<=m;j++)
{
cin>>a[i][j];
}
}
for(int i=1;i<=n;i++)
{
for(int j=1;j<=m;j++)
{
if(a[i][j]>'0')
{
ans++;
dfs(i,j);
}
}
}
cout<<ans;
return 0;
}