数独求解算法

时间:2014-06-01 06:18:13

标签: java sudoku

我尝试通过引用this.来编写算法 但是我得到了StackOverFlow的错误 帮帮我找出程序中的错误?它是递归部分吗?

public void beginSolving(int board[][],int x,int y){
    int i = 1;
    if(unassignedCell(board,x,y)){
        board[x][y] = i;
        if(isValidCell(board,y,x,i)){
            board[x][y] = i;
        }
        if(!isValidCell(board,y,x,i)){
            board[x][y] = 0;
            i++;
        }
    } else { 
        while(x<9){
            beginSolving(board,x++,y);
            if(x==9){
                x = 1;
                beginSolving(board,x,y++);
                if(y==9){

                }
            }
        }
    }
}

1 个答案:

答案 0 :(得分:3)

查看递归调用:beginSolving(board,x++,y)xy参数与原始调用中的参数相同(请记住x++的值是递增之前的值)。因此,您可能会输入一个永无止境的递归。

while(x < 9)永远不会终止,因为只要x达到9,它就会重置为1.

算法永远不会尝试将1以外的数字设置到电路板中。

代码可能还有其他问题,我没有详细检查。