Java 网格迷宫中不连通矩形的去除

Java 网格迷宫中不连通矩形的去除,java,Java,这不是一个真正的迷宫,但想法是相似的 我有这个: 问题是我用红色圈的地方。我需要一种摆脱矩形的方法,这些矩形不是谜题其余部分的一部分 我创建了一个适用于正方形的简单算法: 其工作方式是二维数组的每个元素表示一个顶点(图形节点)。每个图形节点都有一个与其连接的顶点列表。通过从每个顶点到它们的每个连接绘制线来绘制图形 private void removeDisconnectedSquare(int x, int y) { GraphNode topLeft = getNodeAt(x,

这不是一个真正的迷宫,但想法是相似的

我有这个:

问题是我用红色圈的地方。我需要一种摆脱矩形的方法,这些矩形不是谜题其余部分的一部分

我创建了一个适用于正方形的简单算法:

其工作方式是二维数组的每个元素表示一个顶点(图形节点)。每个图形节点都有一个与其连接的顶点列表。通过从每个顶点到它们的每个连接绘制线来绘制图形

private void removeDisconnectedSquare(int x, int y)
{
    GraphNode topLeft = getNodeAt(x, y);
    GraphNode topRight = getNodeAt(x + 1, y);
    GraphNode bottomLeft = getNodeAt(x, y + 1);
    GraphNode bottomRight = getNodeAt(x + 1, y + 1);

    if(topLeft != null &&
       topRight != null &&
       bottomLeft != null &&
       bottomRight != null &&
       !hasNodeToLeft(topLeft) && hasNodeToRight(topLeft) && 
       !hasNodeAbove(topLeft) && hasNodeBelow(topLeft) &&
       hasNodeToLeft(topRight) && !hasNodeToRight(topRight) && 
       !hasNodeAbove(topRight) && hasNodeBelow(topRight) &&
       !hasNodeToLeft(bottomLeft) && hasNodeToRight(bottomLeft) && 
       hasNodeAbove(bottomLeft) && !hasNodeBelow(bottomLeft) &&
       hasNodeToLeft(bottomRight) && !hasNodeToRight(bottomRight) && 
       hasNodeAbove(bottomRight) && !hasNodeBelow(bottomRight))
    {
        removeVertex(x, y);
        removeVertex(x + 1, y);
        removeVertex(x,  y + 1);
        removeVertex(x + 1, y + 1);
    }
}
是否有一种算法或方法可以检测垂直路径是否不是垂直大连接路径的一部分?有时这会产生一条小路径


谢谢

我建议你找一个好的图形库。然后,将每个正方形表示为一个节点,如果正方形之间有一条直接路径,则在正方形之间有一条边。最后,从“入口节点”开始使用“连接节点”算法(由图形库提供)。最后,您可以在所有未被连接性算法标记的节点上循环,并适当地处理它们

例如,如果你在C++中,你可以使用。其他优秀的图形库也应该有类似的支持

你也可以推出你自己的算法版本;e、 例如,在堆栈上推送未标记的邻居节点,标记访问的节点,然后从堆栈中弹出一个节点,直到完成。然而,拥有一个好的图形库对于您在这类项目中可能遇到的其他问题很有用,IMO比您自己的更可取


还值得注意的是,您可能会更改迷宫生成算法,以始终生成连接图,从而避免事后清理断开连接的组件。

在我看来,这似乎是java代码。为什么你要把它标记为C++?OOPS,从另一个问题中留下的标签。