深度优先搜索,求矩阵中有几个连通域:
#include <stdio.h>
#include <string.h>
int aa[6*6]={
1,1,0,0,1,0,
1,0,1,1,0,1,
0,0,1,1,0,1,
1,0,1,0,1,1,
1,1,0,1,0,1,
0,1,0,1,0,1};
int biaoji[6*6];
void dfs(int *aa, int i, int j)
{
biaoji[i*6+j]=1;
if(i+1<6 && biaoji[(i+1)*6+j]==0 && aa[(i+1)*6+j]==1)
dfs(aa,i+1,j);
if(j+1<6 && biaoji[i*6+j+1]==0 && aa[i*6+j+1]==1)
dfs(aa,i,j+1);
if(i-1>=0 && biaoji[(i-1)*6+j]==0 && aa[(i-1)*6+j]==1)
dfs(aa,i-1,j);
if(j-1>=0 && biaoji[i*6+j-1]==0 && aa[i*6+j-1]==1)
dfs(aa,i,j-1);
}
int main()
{
int i,j;
memset(biaoji, 0, sizeof(int)*6*6);
for (i=0; i<6; i++)
{
for (j=0; j<6; j++)
{
if (biaoji[i*6+j]==0 && aa[i*6+j]==1)
{
dfs(aa, i, j);
printf("(%d, %d)\n", i, j);
}
}
}
char ch;
ch=getchar();
return 0;
}

本文介绍使用深度优先搜索算法计算矩阵中的连通域数量,通过遍历矩阵并标记已访问的元素,最终得出连通域的总数。
1035

被折叠的 条评论
为什么被折叠?



