0

我正在写一个数独求解器,并且我有工作求解功能。

bool Sudoku::solve(int row, int col){
    while (board[row][col] != 0){
        col++;

        if (col > 8){
            col = 0;
            row ++;
        }

        if (row > 8){
            return true;
        }
    }

    for (int number = 1; number <= 9; number++){
        board[row][col] = number;

        if (check_row(row,number) && check_col(col,number) && check_box(row,col,number)){
            int next_row = row;
            int next_col = col;

            next_col++;

            if (next_col > 8){
                next_col = 0;
                next_row++;
            }

            if (next_row > 8)
                return true;


            // return solve(next_row, next_col);
            if (solve(next_row, next_col))
                return true;
        }
    }

    board[row][col] = 0;
    return false;
}

而且我真的不明白两者之间有什么区别

if (solve(next_row, next_col))
    return true;

return solve(next_row, next_col);

但是第二行我的功能不起作用

4

4 回答 4

2

如果solve(next_row, next_col)为假,第一个将继续执行函数。第二个只会返回假。

于 2013-03-19T18:43:48.183 回答
0

如果为假,if (solve(next_row, next_col)) return true;则继续执行下一行。仅在为 true 时才评估返回值。这意味着board[row][col] = 0;如果条件在第一个中为假但在第二个中不为假,则将执行。

于 2013-03-19T18:45:15.797 回答
0

在一般情况下,两者之间有两个区别

如果(解决())返回真;

返回解决();

第一个区别是,如果 solve 的返回值为 true,则函数将继续而不是退出。第二个区别是,在第二行中,solve() 不必返回true,或者false可以返回非零值,而不是true(如果 solve() 函数没有返回bool值)。

于 2013-03-19T18:50:11.707 回答
0

第一种情况:

if (solve(next_row, next_col))
    return true;

在这种情况下,当求解函数返回 true 并且永远不会返回 false 时,它​​会返回 true。

第二种情况:

return solve(next_row, next_col);

如果solve返回 true,则返回 true,否则返回 false。

于 2013-03-19T18:51:14.890 回答