1 回答
TA贡献1821条经验 获得超4个赞
问题在于使用递归来构造Nodes. 当你这样做时:
temp.right = construct(arr, i, j + 1, m, n);
temp.down = construct(arr, i + 1, j, m, n);
您实际上是在创建网格的多个版本,每个版本都会覆盖right和down链接Nodes已经创建的网格。例如,在构造之后,对于给定的 ,应该是这样的node:
node.right.down == node.down.right
但考虑到网格的构建方式,情况并非如此,当您尝试将它们连接起来时,这会导致问题。考虑到对于 11x11 网格,您应该创建 121 Nodes,您可以看到问题有多严重,但我检查过,您实际上正在创建 705,431!
幸运的是,修复相当简单。创建一个 2d 数组Nodes并将它们直接连接起来:
public static void main(String args[]) {
// 2D matrix
Node arr[][]= new Node[11][11];
int m = 11, n = 11;
int no=1;
for(int i=0;i<m;i++){
for(int j=0;j<n;j++){
arr[i][j] = new Node();
arr[i][j].no = no;
arr[i][j].xpos = j;
arr[i][j].ypos = i;
no=no+1;
}
}
for(int i=0; i<m; i++)
{
for(int j=0; j<n; j++)
{
arr[i][j].up = (i>0) ? arr[i-1][j] : null;
arr[i][j].left = (j>0) ? arr[i][j-1] : null;
arr[i][j].down = (i+1<m) ? arr[i+1][j] : null;
arr[i][j].right = (j+1<n) ? arr[i][j+1] : null;
}
}
Node head = arr[0][0];
display(head);
hunter(head,5,5);
}
}
产生:
38
48 60 50
我相信这是您期望的输出。
添加回答
举报