【发布时间】:2014-03-14 19:58:46
【问题描述】:
我有一门课用来寻找穿过基本迷宫的路径。迷宫与起点和终点位置一起通过路径。我使用递归来找到点之间的路径。路径作为布尔数组返回。由于某种原因,传递给 Path() 的初始迷宫发生了变化。所以我尝试制作迷宫数组的副本以避免更改任何值,但它仍然无法正常工作。
为什么 path() 会改变 open[][]?可能是这里的 C 编程让我感到困惑。
public static boolean[][] path(boolean[][] open,
int start_i, int start_j,
int end_i, int end_j)
{
int n = open.length;
boolean[][] openCopy = new boolean[n][n]; //make a copy of open
for(int i = 0; i < n; i++)
{
for(int j = 0; j < n; j++)
{
openCopy[i][j] = open[i][j];
}
}
return findPath(openCopy, start_i, start_j, end_i, end_j);
}
public static boolean[][] findPath(boolean[][] openCopy, int start_i, int start_j, int end_i, int end_j)
{
boolean[][] path = new boolean[openCopy.length][openCopy[0].length];
if(openCopy[start_i][start_j] == false) //return false if current position is not open
return path;
else
openCopy[start_i][start_j] = false; //make current position false if not (to prevent infinite backtracking)
if(start_i == end_i && start_j == end_j) //if end found return true
{
path[start_i][start_j] = true;
return path;
}
path = findPath(openCopy, start_i+1, start_j, end_i, end_j); // Move North
path = findPath(openCopy, start_i, start_j+1, end_i, end_j); // Move East
path = findPath(openCopy, start_i-1, start_j, end_i, end_j); // Move South
path = findPath(openCopy, start_i, start_j-1, end_i, end_j); // Move West
return path;
}
【问题讨论】:
-
@AKS "boolean[][] openCopy = new boolean[n][n];"应该创建一个可以在不更改原始数组的情况下更改的新数组。至少我是这么认为的。
-
您如何看待价值变化?这里不会影响数组
open传递到path() -
@DHall 我在传递给 path() 之前打印了“open”,然后再打印它,但它不匹配。我会再次检查我的打印是否有错误。
标签: java arrays recursion boolean path-finding