java - 数独生成器 : Recursion not working

标签 java recursion generator sudoku

我想要实现的目标:

while(there are empty squares)
   get a random number of the remaining numbers
   if(the number hasn't been tried before)
      if(it fits)
        place it and remove from available
        next square
   if(all numbers have been tried)
       forget it
       move back a square and try a different number

这个循环在 availableNumbers = 64 处停止,有时是 37,有时是 81 等。是什么阻止了它一直进行下去?为什么有时会卡住,有时又走回头路?

while(availableNumbers.size()>0){
            rand = rn.nextInt(availableNumbers.size());
            number = availableNumbers.get(rand);
            if(number != triedNumbers[y][x][number-1]){    // If the number hasn't been tried in this square
                if(!checkConflict(number)){
                    squares[y][x].setText(""+number);
                    availableNumbers.remove(new Integer(number));
                    addedNumbers[y][x] = number;
                    triedNumbers[y][x][number-1] = number;
                    moveAhead();
                }
            }
            if(Arrays.equals(triedNumbers[y][x],refArray)){    // If all numbers have been tried in that square
                emptySquare();    // Forget all numbers tried in current square
                moveBack();
            }
}

emptySquare、moveBack、moveAhead 和 checkConflicts 都按预期工作(根据我的测试)。以下是他们的要点:https://gist.github.com/WQvist/ac4296fb3a86fdc3d713

编辑:我终于解决了。感谢您的所有帮助。看我的回答。

最佳答案

您的伪代码不正确。应该是:

while(there are empty squares)
   get a random number of the remaining numbers
   if(the number hasn't been tried before)
      if(it fits)
        place it and remove from available
        next square
   while(all numbers have been tried)
       forget it
       move back a square
   try a different number

有时您必须返回多个方格才能到达尚未尝试所有数字的方格。

关于java - 数独生成器 : Recursion not working,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34783551/

相关文章:

php - 如何递归地将关联数组项复制到另一个数组项?

c - 打印树的节点

Python 追加并生成列表

java - 从文件中读取负数时结束程序

java - 删除字符串中的重复字符

java - 将本地jar添加到mvn clean package结果中

java - 正则表达式匹配数字,逗号和分号?

PHP 嵌套数组 : Imploding all the tree keys of each leaf results in a multidimensional array instead of a 1D associative one

python - 如何在生成器中使用 python 上下文管理器

ruby-on-rails - 如何让生成器调用 Rails 3 中的其他生成器