【发布时间】:2014-03-30 04:06:55
【问题描述】:
以this为例:
bool SolveSudoku(int grid[N][N])
{
int row, col;
// If there is no unassigned location, we are done
if (!FindUnassignedLocation(grid, row, col))
return true; // success!
// consider digits 1 to 9
for (int num = 1; num <= 9; num++)
{
// if looks promising
if (isSafe(grid, row, col, num))
{
// make tentative assignment
grid[row][col] = num;
// return, if success, yay!
if (SolveSudoku(grid))
return true;
// failure, unmake & try again
grid[row][col] = UNASSIGNED;
}
}
return false; // this triggers backtracking
}
网格总是作为参数传递给递归调用,因此每次迭代都有一个新的网格副本。
我似乎无法概念化使用相同逻辑在使用全局网格时是否有任何区别。
在失败条件之后,变量被设置为“取消制作并重试”——这不应该处理回溯中的任何“撤消”吗?
如果网格是全局的,这种递归回溯会有什么不同,为什么每次都发送和额外的副本?
【问题讨论】:
标签: c algorithm search recursion artificial-intelligence