我正在写一个数独求解器,我已经有了解决功能。
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);
然而,对于第二行,我的功能不起作用
答案 0 :(得分:2)
如果solve(next_row, next_col)
为假,则首先会继续执行功能。而第二个只会返回假。
答案 1 :(得分:0)
solve(next_row, next_col)
返回一个布尔值,if(solve...)
检查其返回值,如果问题解决,则决定返回true。
在递归中你需要一个条件来阻止它:
if (solve(next_row, next_col))
return true;
找到解决方案后会停止solve
。
答案 2 :(得分:0)
如果为if (solve(next_row, next_col)) return true;
,则执行继续到下一行。返回仅在true时评估。这意味着如果条件在第一个条件中为假而在第二个条件中不是,则将执行board[row][col] = 0;
。
答案 3 :(得分:0)
在一般情况下,
之间存在两个差异if(solve())返回true;
和
return solve();
第一个区别是,如果来自solve的返回值的计算结果为true,则函数将继续而不是退出。第二个区别是,在第二行中,solve()不必返回true
或false
,但可以返回非零值而不是true
(如果solve()函数没有返回bool
值。
答案 4 :(得分:0)
第一种情况:
if (solve(next_row, next_col))
return true;
在这种情况下,当solve函数返回true并且永远不返回false时,它返回true。
第二种情况:
return solve(next_row, next_col);
如果solve
返回true,则返回true,否则返回false。