1 回答

TA貢獻1821條經驗 獲得超5個贊
問題在于使用遞歸來構造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
我相信這是您期望的輸出。
添加回答
舉報