【问题标题】:Iterative Sudoku algorithm迭代数独算法
【发布时间】:2013-12-15 01:49:00
【问题描述】:

我在过去创建了一个非常简单的算法来蛮力数独解决方案。这很容易以递归方式完成,只需将每个单元格中的每个可能值放入每个组合中,只要没有不一致(例如同一行中的两个单元格具有相同的值)。

递归(伪代码):

solve_sudoku(int[][] cell, int x, int y)
if (isSolution)
{
   return field;
}
else
{
   for (int i=1; i<9; i++)
   {
     if (legal_move(x,y,i))
        cell[x][y] = i;
        solve_sudoku(cell,x+1,y);
   }
}

我想知道是否有暴力破解数独解决方案的迭代方法?我不认为这是可能的,但我不确定。如果存在,会是什么样子?

赫克托

【问题讨论】:

标签: algorithm recursion iteration


【解决方案1】:

使用堆栈是将递归代码转换为迭代代码的最简单方法。这就是递归的工作原理(使用函数调用堆栈)。

这是迭代伪代码,它是您的递归代码的粗略翻译。

while(!isSolution(head_of_stack) && stack_not_empty)
{
   current = pop_head_of_stack
   for(move in legal_moves(current)){
       stack.push(move) // move is your x,y passed recursively
                        // or the whole board - depending how you 'undo' moves
                        // at the recursive backtracking now
   }

}
return head_of_stack

【讨论】:

    猜你喜欢
    • 2015-03-27
    • 1970-01-01
    • 1970-01-01
    • 2017-04-07
    • 1970-01-01
    • 2013-02-09
    • 2011-02-08
    • 2016-06-14
    • 1970-01-01
    相关资源
    最近更新 更多