我试图找出一种算法,它允许我遍历我创建的连接路径网格,以便我可以确定是否有任何未连接的路径。例如,请参阅我的网格下面的图像:
一切正常,唯一的问题是左下角附近的块没有连接到任何东西。我希望所有路径以某种方式相互连接。
所以我需要编写一个通过网格工作的算法,并确定是否存在未连接的块。
目前,使用二维数组构建网格,如下所示:
for(var x = 0; x < 10; x++){
hz[x] = new Array(10);
for(var y = 0; y < 10; y++){
hz[x][y] = new block(0, 0, 0, 0);
}
}
数组中的每个元素都包含block
类型的对象,如下所示:
function block(top, bottom, left, right){
this.top = top;
this.bottom = bottom;
this.left = left;
this.right = right;
}
为了确定路径,我有一堆代码,通过制作left
,top
,bottom
和/或right
值,随机为每个元素分配边对或错。边缘上有块的附加条件。然后根据每个块的真值和假值为每个块分配一个图像。
请你能帮我弄清楚某种算法让我遍历这个结构来检查每个块是否已连接。
答案 0 :(得分:1)
执行此操作的简单算法是查找连接的组件。顾名思义,它会找到连接在一起的节点组。
因此,如果您有多个组件,则所有块都没有连接在一起。
想法是遍历块。对于每个块,找到您可以从起点到达的所有块:这将构成一个组件。现在,通过正确的实现,您只需访问每个块一次,因此非常有效。
关于此问题的wikipedia页面是一个很好的起点。
答案 1 :(得分:0)
你所拥有的基本上是一个图表,你问的是图表是否已连接。 graph algorithm finding if graph is connected, bipartite, has cycle and is a tree