我正在解决java 2D数组中的NxN难题。我可以在四个方向上移动到空的瓷砖:左,右,下或上。我的问题是,如果我得到空瓦片(节点)的索引(行en列值),我怎么知道我是否必须移动LEFT,RIGHT,DOWN或UP来生成其后继(邻居)节点。
例如,如果它是一个包含9个元素的1维数组,那么我可以执行以下操作: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与我处理的同一任务相关
由于
答案 0 :(得分:0)
很简单,你可以考虑不要移动故事,而是移动空间。给定空瓦片的坐标,它可以在所有方向上移动,除非它位于其中一个边界上,这将限制移动。
答案 1 :(得分:0)
您必须考虑两件事,以确定您可以移动的方向: