给定2D数组,例如:
0 0 0 0 0
0 2 3 0 1
0 8 5 0 7
7 0 0 0 4
输出应为群集组:
类别1:
<2,3,8,5,7>
类别2:
<1,7,4>
最佳答案
您的问题似乎是找到连接的组件。您应该使用遍历方法(BFS或DFS都可以完成工作)。遍历所有元素,对于每个非零元素,开始一个遍历,并记录您在该遍历中看到的所有元素,并将每个访问的元素变为零。类似于以下代码:
void DFS(int x, int y)
{
printf("%d ", g[x][y]);
g[x][y] = 0;
// iterate over neighbours
for(dx=-1; dx<=1; dx++)
for(dy=-1; dy<=1; dy++)
if (g[x+dx][y+dy]) DFS(x+dx, y+dy);
}
for(i=0; i<n; i++)
for(j=0; j<n; j++)
if (g[i][j])
{
DFS(i, j);
printf("\n");
}
关于algorithm - 给定二维数字数组,找到聚类,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8664808/