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);

ただし、2行目では機能が機能しません

4

4 に答える 4

2

solve(next_row, next_col)falseの場合、最初に関数の実行を続行します。そして2番目はfalseを返します。

于 2013-03-19T18:43:48.183 に答える
0

一般的なケースでは、2 つの違いがあります。

if (solve()) は true を返します。

解決する();を返します。

最初の違いは、solve からの戻り値が true と評価された場合、関数は終了するのではなく続行することです。2 つ目の違いは、2 行目では、solve() が(solve() 関数が値を返さなかった場合)ではなく、0 以外の値を返す必要がないtrueか、返すことができることです。falsetruebool

于 2013-03-19T18:50:11.707 に答える
0

最初のケース:

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

この場合、solve 関数が true を返し、決して false を返さない場合は true を返します。

2 番目のケース:

return solve(next_row, next_col);

true を返す場合solveは true を返し、それ以外の場合は false を返します。

于 2013-03-19T18:51:14.890 に答える
0

if (solve(next_row, next_col)) return true;false の場合、実行は次の行に続きます。戻り値は true の場合にのみ評価されます。これはboard[row][col] = 0;、最初の条件が false で、2 番目の条件が false の場合に実行されることを意味します。

于 2013-03-19T18:45:15.797 に答える