我想写二维数组迷宫求解器,我明白了。但是,当二维数组映射有 2 个或更多解决方案时,我的代码不起作用。public class Mapsolver { private int tried = 2; private int path = 3; private int maze[][]; public Mapsolver(int maze[][], int destinationcolumn, int destinationrow, int locationcolumn, int locationrow) { this.maze = maze; traverse(locationrow, locationcolumn, destinationrow, destinationcolumn); } public boolean valid(int row, int column) { boolean result = false; if (row >= 0 && row < maze.length && column >= 0 && column < maze[row].length) { if (maze[row][column] == 1) { result = true; } } return result; } public boolean traverse(int row, int column, int destrow, int destcolumn) { boolean done = false; if (valid(row, column)) { maze[row][column] = tried; if (row == destrow && column == destcolumn) done = true; else { done = traverse(row + 1, column, destrow, destcolumn); if (!done) done = traverse(row, column + 1, destrow, destcolumn); if (!done) done = traverse(row - 1, column, destrow, destcolumn); if (!done) done = traverse(row, column - 1, destrow, destcolumn); } if (done) { maze[row][column] = path; } } return done; } public String toString() { String result = "\n"; for (int row = 0; row < maze.length; row++) { for (int column = 0; column < maze[row].length; column++) result += maze[row][column] + ""; result += "\n"; } return result; }}如果我们有一个解决方案,它绝对是正确的。但是,如果我们有 2 个或更多解决方案,则它标志着所有可能的解决方法。但是,我不想在打印时看到所有解决方案。正确的输出将是这些的一种解决方案。
2 回答
呼啦一阵风
TA贡献1802条经验 获得超6个赞
您可以为每个访问的顶点存储一个指向父顶点的指针,一旦到达目标顶点,您就停止搜索并将(反向)路径打印回起始顶点。但是在所谓的“完美”迷宫中,它只不过是一棵生成树,任何两个顶点之间总会有一条路径。
添加回答
举报
0/150
提交
取消



