今天做了一个面试题 要求是查找矩阵中有几个小块。
输入矩阵如下:
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
思路是首先遍历矩阵找到 1 之后将相同块的 1 变为 0 计数count+1.
C语言代码如下:
#include <stdio.h>
#include <stdlib.h>
int n,m;
int a[10][10];
void DFS(int i, int j)
{
if(i<0||j<0||i>=n||j>=m||a[i][j]==0)
return ;
a[i][j]=0;
DFS(i,j+1);//right
DFS(i+1,j);//down
DFS(i,j-1);//left
DFS(i-1,j);//up
}
int main()
{
int i,j;
int count=0;
scanf("%d %d",&n,&m);
for(i=0;i<n;i++)
{
for(j=0;j<m;j++)
scanf("%d",&a[i][j]);
}
for(i=0;i<n;i++)
{
for(j=0;j<m;j++)
{
if (a[i][j]==1)
{
DFS(i,j);
count++;
}
}
}
printf("%d",count);
return 0;
}