Tag: 数独

Java数独生成器无法正常工作

我一直在研究java中的数独谜题生成器,我写了这个类来生成谜题,但它没有正确生成谜题。 这是我得到的一个例子: 如您所见,这不是一个有效的数独解决方案。 但是看看我的代码,我不明白它为什么没有产生有效的谜题。 有人可以解释为什么这不能正常工作? package sudoku; import java.util.Random; public class Puzzle { // number generator Random gen = new Random(); // 9×9 puzzle int puzzle[][] = new int[9][9]; public int[][] generate() { // add each number to the board for (int x = 0; x < 9; x++) { for (int y = 0; […]

如何防止遗传算法收敛于局部最小值?

我正在尝试使用遗传算法构建一个4 x 4数独求解器。 我有一些问题,价值收敛到局部最小值。 我正在使用排名方法并删除最后两个排名的答案可能性,并用两个排名最高的答案可能性之间的交叉替换它们。 为了避免局部mininma的额外帮助,我也使用变异。 如果在特定的生成量内未确定答案,则我的人口中充满了全新的随机状态值。 但是,我的算法似乎陷入局部最小值。 作为健身function,我正在使用: (开放平方的总金额* 7(每个方格可能违规;行,列和方框)) – 违规总数 population是整数数组的ArrayList,其中每个数组都是基于输入的sudoku的可能结束状态。 确定人群中每个arrays的适应度。 有人能够帮助我确定为什么我的算法会收敛于局部最小值,或者可能会推荐一种技术来避免局部最小值。 任何帮助是极大的赞赏。 健身function: public int[] fitnessFunction(ArrayList population) { int emptySpaces = this.blankData.size(); int maxError = emptySpaces*7; int[] fitness = new int[populationSize]; for(int i=0; i<population.size();i++) { int[] temp = population.get(i); int value = evaluationFunc(temp); fitness[i] = maxError – value; System.out.println("Fitness(i)" + […]

数独求解器,不是回溯求解器

过去几周我一直在玩数独游戏。 游戏作为很多function,如:玩游戏,打印数独,解决数独。 解决function使用传统的回溯,但这不是问题,问题是我需要游戏能够产生一个人道可解的数独,因为我需要一个能够解决数据的方法,因为人类会做到这一点。 如果有人能帮助我找出如何做到这一点的机制,我将非常感激。

数独回溯无效数独

我创建了一个Sudoku Backtracking解算器,它工作正常,但现在我想发出一个错误,如果数独无法解决,因为它是无效的,例如,如果给出这个数独: http://img5.imageshack.us/img5/2241/sudokugq.jpg 如果不能解决,我该怎么办才能使我的求解方法出错? 我总是最终使用Zeros或陷入循环。 public void solve( int row, int col ) throws Exception { // Throw an exception to stop the process if the puzzle is solved if( row > 8 ){ //Gelöst } // If the cell is not empty, continue with the next cell if( sudo[row][col] != 0 ){ next( row, […]

如何生成-complete-sudoku板? 算法错误

我正在尝试生成一个完整的(即每个单元格中填充一个数字)类似Sudoku的板。 这是与sudokus无关的其他东西,所以我对达到可以解决的白色方块或与sudokus有关的任何东西都不感兴趣。 不知道你是否知道我的意思。 我在java中完成了这个: private int sudokuNumberSelector(int x, int y, int[][] sudoku) { boolean valid = true; String validNumbers = new String(); int[] aValidNumbers; int squarexstart = 0; int squareystart = 0; int b = 0; // For random numbers Random randnum = new Random(); randnum.setSeed(new Date().getTime()); // Check numbers one by one for(int n […]

Sudoku生成器的递归解决方案

我正在尝试编写一个算法,用Java或Javascript创建一个合法的数独板。 既不工作,也不完全确定原因。 从本质上讲,两个程序中的问题是x或y的增量都超过它应该增加(跳过正方形)。 我不能为我的生活弄清楚这是怎么回事。 如果需要,我可以提供完成JS解决方案的HTML。 我最好的猜测是它与我如何使用递归创建堆栈有关,但据我所知,它应该工作。 在我的旧代码中有一个不正确的for循环,我知道这一点。 我粘贴了一个旧版本,现在已经修好了。 Java的: import java.util.*; public class SudokuGenerator { //credit:cachao //http://stackoverflow.com/questions/9959172/recursive-solution-to-sudoku-generator public static final int BOARD_WIDTH = 9; public static final int BOARD_HEIGHT = 9; public SudokuGenerator() { board = new int[BOARD_WIDTH][BOARD_HEIGHT]; } //Recursive method that attempts to place every number in a square public int[][] nextBoard() { nextBoard(0,0); […]