これは実際には迷路ではありませんが、考え方は似ています。
私はこれを持っています:
問題は赤丸で囲んだところです。残りのパズルの一部ではない長方形を取り除く方法が必要です。
正方形で機能する単純なアルゴリズムを作成しました。
これが機能する方法は、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);
}
}
頂点のパスが頂点の大きな接続パスの一部ではないかどうかを検出できるアルゴリズムまたは方法はありますか? これにより、小さなパスが生成されることがあります。
ありがとう