详情: |
一矩形阵列由数字0到9组成,数字1到9代表细胞,细胞的定义为沿细胞数字上下左右还是细胞数字则为同一细胞,求给定矩形阵列的细胞个数。如阵列: 02345000 67103456 05002045 60067100 00000089 有4个细胞 |
输入格式: | 整数m,n(m行,n列)矩阵。 |
输出格式: | 细胞的个数。 |
题目理解:就是在一张图中找到子图的个数。这里需要注意的地方是输入。输入之间没有空格,不能直接使用二维数组。可以使用字符串数组来转换。其他地方就是深搜了。
深搜的话,就是在一个点的四周寻找,若是符合要求的,则利用标记数组来标记。
for(i = 1;i <= n;i++)
scanf("%s",c);
for(j = 0;j < m;j++)
a[i][j] =c[j]-'0';
代码如下:
/*细胞数-dfs*/
#include <stdio.h>
int a[101][101];
int book[101][101];
int n,m,sum;
void dfs(int i,int j)
{
int k,x,y;
int next[4][2]={{0,1},{1,0},{0,-1},{-1,0}};
for(k = 0;k < 4;k++)
{
x = i+next[k][0];
y = j+next[k][1];
if(x<1||x>n||y<0||y>m-1)//边界
{
continue;
}
if(a[x][y]>0&&book[x][y]==0)
{
book[x][y] = 1;
dfs(x,y);
}
}
return ;
}
int main()
{
int i,j,startx,starty;
char c[101];
scanf("%d%d",&n,&m);
for(i = 1;i <= n;i++)
{
scanf("%s",c);
for(j = 0;j < m;j++)
{
a[i][j] =c[j]-'0';
}
}
for(i = 1;i <= n;i++)
{
for(j = 0;j < m;j++)
{
if(a[i][j]>0&&book[i][j]==0)//是细胞,且未标记过
{
sum++;
book[i][j] = 1;
dfs(i,j);
}
}
}
printf("%d",sum);
return 0;
}