Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/384.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 我如何确定移动的方向_Java_Algorithm - Fatal编程技术网

Java 我如何确定移动的方向

Java 我如何确定移动的方向,java,algorithm,Java,Algorithm,我正在用Java2D数组解决一个NxN难题。我可以从四个方向移动到空瓷砖:左、右、下或上。我的问题是,如果我得到空分幅(节点)的索引(行-列值),我如何知道我是否必须向左、向右、向下或向上移动以生成其后续(相邻)节点 例如,如果它是一个由9个元素组成的一维数组,那么我可以这样做:index是空磁贴的索引 if(index == 0){ tempSuccessorNodes.add(new Node(swap(0,1,arrayPosition),curNode));

我正在用Java2D数组解决一个NxN难题。我可以从四个方向移动到空瓷砖:左、右、下或上。我的问题是,如果我得到空分幅(节点)的索引(行-列值),我如何知道我是否必须向左、向右、向下或向上移动以生成其后续(相邻)节点

例如,如果它是一个由9个元素组成的一维数组,那么我可以这样做:
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来确定下一步的行动呢?