Java 我如何确定移动的方向
我正在用Java2D数组解决一个NxN难题。我可以从四个方向移动到空瓷砖:左、右、下或上。我的问题是,如果我得到空分幅(节点)的索引(行-列值),我如何知道我是否必须向左、向右、向下或向上移动以生成其后续(相邻)节点 例如,如果它是一个由9个元素组成的一维数组,那么我可以这样做:Java 我如何确定移动的方向,java,algorithm,Java,Algorithm,我正在用Java2D数组解决一个NxN难题。我可以从四个方向移动到空瓷砖:左、右、下或上。我的问题是,如果我得到空分幅(节点)的索引(行-列值),我如何知道我是否必须向左、向右、向下或向上移动以生成其后续(相邻)节点 例如,如果它是一个由9个元素组成的一维数组,那么我可以这样做:index是空磁贴的索引 if(index == 0){ tempSuccessorNodes.add(new Node(swap(0,1,arrayPosition),curNode));
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就是一个例子)。在知道空单元格/磁贴/节点的索引后,如何知道是否必须向左、向右、向下或向上移动
我在这里有一个我之前发布的与我处理的同一任务相关的消息
谢谢
这是简单的,你认为你不移动故事,而是空间。给定空磁贴的坐标,它可以向所有方向移动,除非它位于其中一个边界上,这将限制移动。
您必须考虑两个因素,以确定可以向哪个方向移动:- 如果互动程序位于第一行,请不要访问前一行
- 如果瓷砖在最后一排,不要去参观下一排
- 如果互动程序位于第一列,请不要访问上一列
- 如果互动程序位于最后一列,请不要访问下一列
谢谢你的回复。因此,如果我答对了,这意味着我必须同时调用up()、down()、left()和right()函数?@EddyFreeman一般来说,你不知道哪一个是右移,这就是为什么这是一个搜索,我的意思是,空磁贴可以向所有方向移动,而不会离开电路板。这决定了搜索树,然后你必须定义你的搜索算法(可能使用一些启发式来驱动搜索)再次感谢。am使用曼哈顿heurestic(f=g+h),g是从开始节点到当前节点的成本,h是从当前节点到目标节点的成本。你能给我一个小小的解释,告诉我怎么做才能推动搜索吗。这是我第一次这样做,所以我需要一些具体的解释来继续。目前我有四个函数(up()、down()、left()和en right()),那么接下来我必须做什么才能使用heureustic来确定下一步的行动呢?