我正在解决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来确定下一步的移动? –