Проблема заключается в использовании рекурсии для построения сетки 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!
К счастью, это довольно простое решение.Создайте двумерный массив из 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
Я полагаю, что это результат, который вы ожидали.