recursion回溯有时会丢失一个瓦片?

我有一个基本的recursion回溯alghorithm迷宫。 它几乎可以工作,但偶尔在角落留下一些瓷砖。 这是recursion函数:

void GenerateMaze(Coordinate tilePos) { Debug.Log("MazeGen"); tileMap[tilePos.x, tilePos.y].visited = true; Shuffle<Coordinate>(directions); foreach(Coordinate d in directions) { if (tilePos.x + dx >= 0 && tilePos.x + dx < mapWidth && tilePos.y + dy >= 0 && tilePos.y + dy < mapHeight) { if (!tileMap[tilePos.x + dx, tilePos.y + dy].visited) { Carve(tilePos, d); GenerateMaze(new Coordinate(tilePos.x + dx, tilePos.y + dy)); } } } } 

这就是Carve方法的样子:

 private void Carve(Coordinate position, Coordinate direction) { if (direction.Equals(new Coordinate(-1, 0))) { tileMap[position.x, position.y].west = true; tileMap[position.x + direction.x, position.y + direction.y].east = true; } else if (direction.Equals(new Coordinate(1, 0))) { tileMap[position.x, position.y].east = true; tileMap[position.x + direction.x, position.y + direction.y].west = true; } else if (direction.Equals(new Coordinate(0, -1))) { tileMap[position.x, position.y].south = true; tileMap[position.x + direction.x, position.y + direction.y].north = true; } else if (direction.Equals(new Coordinate(0, 1))) { tileMap[position.x, position.y].north = true; tileMap[position.x + direction.x, position.y + direction.y].south = true; } } 

我打赌在一个错字或愚蠢的错误,但我找不到它。 在我的最后结果中, tileMap[4,4]没有任何墙壁保持不动。 但是这个algorithm确实会回到原来的结局。 这并不经常发生,直到现在才发生。

下面是一个例子,右下方的两块tiles也没有被雕刻。 在这里输入图像描述

这是另外一个没有墙的人,这次在迷宫的另一个角落有3个没有连接的地tiles在这里输入图像描述

任何人都可以find最新的错误?