我正在解決java二維數組中的NxN難題。我可以在四個方向移動到空的方塊:左,右,下或上。我的問題是,如果我得到空瓷磚(節點)的索引(行列值),我怎麼知道我是否必須移動左,右,下或上生成其後繼(鄰居)節點。如何確定移動的方向
例如,如果它是9個元素,然後我可以這樣做的一個1Dimensional數組:index
是空的瓦片
if(index == 0){
tempSuccessorNodes.add(new Node(swap(0,1,arrayPosition),curNode));
tempSuccessorNodes.add(new Node(swap(0,3,arrayPosition),curNode));
}
else if(index == 1){
tempSuccessorNodes.add(new Node(swap(0,1,arrayPosition),curNode));
tempSuccessorNodes.add(new Node(swap(1, 4, arrayPosition),curNode));
tempSuccessorNodes.add(new Node(swap(1, 2, arrayPosition),curNode));
}
....
if(index == 8){
tempSuccessorNodes.add(new Node(swap(8, 7, arrayPosition),curNode));
tempSuccessorNodes.add(new Node(swap(8, 5, arrayPosition),curNode));
}
的索引,以產生當前節點的後繼者。但是這裏正在處理NxN(其中3x3是一個實例)。我如何知道在知道空單元格/瓦片/節點的索引後,是否必須移動左,右,向下或向上?
我有一個question這裏我先前公佈其與同一個任務我處理
感謝
感謝您的回覆。所以如果我找到你的話,這意味着我必須同時調用up(),down(),left()和right()函數? –
@EddyFreeman一般你不知道哪一個是正確的舉動,這就是爲什麼它是一個*搜索*,我的意思是空的瓷磚可以在所有的方向移動,它不會離開電路板。這決定了搜索樹,然後你必須定義你的搜索算法(可能使用一些啓發式來驅動搜索) –
再次感謝。我使用manhattan heurestic(f = g + h),g是從開始節點到當前節點的開銷,h是從當前節點到目標節點的開銷。你能給我一點解釋怎麼做來推動搜索。這是我第一次這樣做,所以我需要一些具體的解釋來繼續。目前我有四個函數(up(),down(),left()和right()),那麼接下來我需要做什麼才能使用heureustic來確定下一步的移動? –