递归只走一条路?

时间:2018-04-21 03:24:43

标签: java algorithm recursion

最近,我一直在重新学习Java。

我正在制定一项解决8皇后问题的计划来练习我的技能。当我运行我的程序时,我没有得到任何解决方案,但我似乎无法找到该错误。

有问题的代码:

public void solve(char [] [] board, int row){
        for (int i = 0; i < 8; i++) {
            if (board[row][i] == 'O') {             //if the position is blank
                char[][] newBoard = board.clone();  //make a duplicate
                newBoard[row][i] = 'q';             //place a queen in the valid position
                invalidate(newBoard, row, i);       //mark the places the queen can take
                //printBoard(newBoard);               //display to check
                if(row < 7){                        //if we didn't just do the final row
                    solve(newBoard, (row+1));       //do the next row
                }else {                             //if we DID just do the final row
                    printBoard(board);              //print the solution
                }
            }
        }
}

当我的打印方法运行以获得该过程时,我得到5个板。最后一个是:

qXXXXXXX
XXqXXXXX
XXXXqXXX
XqXXXXXX
XXXqXXXX
XXXXXXXX
XXXXXXXX
XXXXXXXX

这个结果似乎意味着该程序在没有任何问题的情况下贯穿最前面的路径,但由于某种原因我不能解决其他问题。

正如我在开始时提到的那样,我对编码没有超级经验,所以非常感谢任何帮助!

1 个答案:

答案 0 :(得分:1)

解决了这个问题。显然.clone()方法不适用于二维数组,因此程序重新使用了失败的数组。我使用了一个简单的嵌套循环和一个新数组,问题得到了解决。 谢谢大家的帮助!