这不是一个真正的迷宫,但想法是相似的。
我有这个:
问题是我用红色圈起来的地方。我需要一种方法来摆脱不属于拼图其余部分的矩形。
我创建了一个适用于正方形的简单算法:
其工作方式是 2D 数组的每个元素代表一个顶点(图形节点)。每个图节点都有一个与之相连的顶点列表。该图是通过从每个顶点到它们的每个连接绘制线来绘制的。
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);
}
}
是否有一种算法或方法可以检测顶点路径是否不是顶点的大连接路径的一部分?有时这会产生一条小路径。
谢谢