8 - 益智的Java算法拼图

问题描述 投票:1回答:1

我一直在8益智类,并感到沮丧了一下检查出码。我需要写守则关于左,右,上,下运动。当我删除的权利,该代码提供了一个“索引越界-1”的错误,为双阵列,扩展得到后继节点,并加入他们后。下面是正确的代码,通过迷宫/接班人去,返回孩子家长?有什么不对的代码为左,上,下,右?

当我回到多次试验,我看到的0向右移动的运动,然后放下,当它到达的边缘,所以我不知道,如果下面的代码实际上是运行正确,或者如果有东西在里面需要被改变。

让人不解的需要给的输出:

1 2 3

4 5 6

7 8 0

典型的输出显示:

1 7 8

5 4 2

3 6 0

因此,寻路似乎是错的,我相信这是与下面的移动代码,但我不确定。我的问题是低于准确的代码,确实需要有东西在里面改变?是什么造成了-1的ArrayIndexOutOfBounds与此相关的,或者是其他什么东西?

ArrayList<Node> successors = new ArrayList<Node>();
//generate a successor from moving the 0 to the right 
if (col < size-1) {
    int[][] right = Board.copyBoard(board);
    right[row][col] = right[row][col + 1];
    right[row][col+1] = 0;                  
    successors.add(new Node(right)); 
} else if (col < size - 1) {
    int[][] left = Board.copyBoard(board);
    left[row][col] = left[row][col-1];
    left[row][col-1] = 0;
    successors.add(new Node(left));
} else if (row < size-1) {
    int[][] down = Board.copyBoard(board);
    down[row][col] = down[row + 1][col];
    down[row + 1][col] = 0;                 
    successors.add(new Node(down)); 
} else if (row < size - 1) {
    int[][] up = Board.copyBoard(board);
    up[row][col] = up[row-1][col];
    up[row-1][col] = 0;
    successors.add(new Node(up));
}

return successors;
java breadth-first-search
1个回答
3
投票

此刻,你的代码检查关口<大小-1左,右移动,同样为向上和向下。第二个条件应该是COL> 0,最后一个行> 0

© www.soinside.com 2019 - 2024. All rights reserved.