标签: sudoku

如果volatile不是一个好主意,C#替代锁定

我很抱歉,我知道这个话题已经被做死(我读过我读过这个这个,还有一些人),但有一个问题,我有我不知道怎么做"正确的".

目前,我的多线程数独策略代码如下:

public class MultithreadedStrategy : ISudokuSolverStrategy
{
    private Sudoku Sudoku;
    private List<Thread> ThreadList = new List<Thread>();
    private Object solvedLocker = new Object();
    private bool _solved;
    public bool Solved // This is slow!
    {
        get
        {
            lock (solvedLocker)
            {
                return _solved;
            }
        }
        set
        {
            lock (solvedLocker)
            {
                _solved = value;
            }
        }
    }
    private int threads;
    private ConcurrentQueue<Node> queue = new ConcurrentQueue<Node>();

    public MultithreadedStrategy(int t)
    {
        threads = t;
        Solved = false;
    }
    public Sudoku …
Run Code Online (Sandbox Code Playgroud)

c# multithreading locking volatile sudoku

3
推荐指数
1
解决办法
4199
查看次数

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

我一直在使用java中的数独谜题生成器,我写了这个类来生成谜题,但它没有正确生成谜题.这是我得到的一个例子:

难题

如您所见,这不是一个有效的数独解决方案.但是看着我的代码,我不明白为什么它没有产生有效的谜题.有人可以解释为什么这不能正常工作?

package sudoku;

import java.util.Random;

public class Puzzle {

    // number generator
    Random gen = new Random();

    // 9x9 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; y < 9; y++) {

                boolean isValid = false;

                // keep generating new numbers until a valid number is found
                while (isValid == false) {

                    // generate random …
Run Code Online (Sandbox Code Playgroud)

java sudoku

3
推荐指数
1
解决办法
1161
查看次数

prolog数独求解器耗尽全局堆栈

我尝试在swi-prolog中编写二进制数独求解器.(这里解释了二元数独)

问题是我现在正在耗尽全局堆栈.我给它2 gb应该绰绰有余.我使用的是有缺陷的算法吗?有什么我可以做得更好,以避免与这样的小谜题运行缺乏全局堆栈错误?

更多信息:我已经在4X4谜题上耗尽了堆栈,第一个约束仅应用了6 ^ 4种可能性.您可以使用以下命令查询此问题

problems(2,Field),binary_sudoku(Field).
Run Code Online (Sandbox Code Playgroud)

代码在这里:

:-use_module(library(clpfd)).

valid_row(Row) :-
    Row ins 0..1,
    length(Row,L),
    sum(Row,#=,L/2).

matrixNth1(Matr,X,Y,El) :-
    nth1(Y,Matr,CurRow),
    nth1(X,CurRow,El).

all_diff([]).
all_diff([X|Y]) :-
    maplist(dif(X),Y),
    all_diff(Y).


valid(_,1,1).
valid(Rows,1,Y) :-
    length(Rows,Y).
valid(Rows,X,1) :-
    length(Rows,X).
valid(Rows,X,X) :-
    length(Rows,X).

valid(Rows,X,Y) :-
    matrixNth1(Rows,X,Y,0).
valid(Rows,X,Y):-
    AboveY is Y-1,
    matrixNth1(Rows,X,AboveY,0).
valid(Rows,X,Y):-
    BelowY is Y+1,
    matrixNth1(Rows,X,BelowY,0).
valid(Rows,X,Y):-
    LeftX is X-1,
    matrixNth1(Rows,LeftX,Y,0).
valid(Rows,X,Y):-
    RightX is X+1,
    matrixNth1(Rows,RightX,Y,0).

binary_sudoku(Rows) :-
    length(Rows,Height),
    transpose(Rows,Cols),
    length(Cols,Height),
    maplist(valid_row,Rows),
    foreach(between(1,Height,X),foreach(between(1,Height,Y),valid(Rows,X,Y))),
    all_diff(Rows),all_diff(Cols).


problems(1,[[_,_],[_,_]]).

problems(2,[[_,_,_,_],[_,_,_,_],[_,_,_,_],[_,_,_,_]]).
Run Code Online (Sandbox Code Playgroud)

prolog sudoku swi-prolog clpfd

3
推荐指数
1
解决办法
447
查看次数

Z3数独解算器

几个星期前我在网站rise4fun上,他们有一个python代码,将数独拼图输入文件转换为z3.我今天再次检查并且文件已经消失,并且想知道是否有人有这个代码或者可以向我解释如何实现它.谢谢!!

sudoku smt z3

3
推荐指数
1
解决办法
1709
查看次数

Prolog解决数独

我在Prolog很新,并在swi-prolog.org上找到了解决数据的例子.但我无法运行它.我抬头看着same_length而且只有same_length/2没有same_length/1.也是all_distinct/2没有all_distinct/0.http://www.swi-prolog.org/pldoc/man?section=clpfd-sudoku

这是我的错误:

ERROR: d:/.../prolog/sudoku.pl:5:10: Syntax error: Operator expected
% d:/.../prolog/sudoku compiled 0.00 sec, 0 clauses
Warning: The predicates below are not defined. If these are defined
Warning: at runtime using assert/1, use :- dynamic Name/Arity.
Warning: 
Warning: all_distinct/1, which is referenced by
Warning:        d:/.../prolog/sudoku.pl:16:8: 2-nd clause of blocks/3
Run Code Online (Sandbox Code Playgroud)

这是SWI-Prolog示例的代码:

    use_module(library(clpfd)). 

    sudoku(Rows) :-
        length(Rows, 9), maplist(same_length(Rows), Rows),
        append(Rows, Vs),
        Vs in 1..9,
        maplist(all_distinct, Rows),
        transpose(Rows, Columns),
        maplist(all_distinct, Columns),
        Rows = [As,Bs,Cs,Ds,Es,Fs,Gs,Hs,Is],
        blocks(As, …
Run Code Online (Sandbox Code Playgroud)

prolog sudoku constraint-programming clpfd

3
推荐指数
1
解决办法
945
查看次数

在Haskell中输出列表列表?

我是Haskell的初学者,但我被要求创建一个数独求解器.我一直在用它做一些稳定的进步,但它要求我做的一件事就是打印一个有趣的数独谜题表示.Puzzle数据类型被定义为列表列表,因此[[Maybe Int]]它由块值([Maybe Int]表示一行)组成.

功能签名是这样的:

printPuzzle :: Puzzle -> IO ()

我该如何输出?我知道这可能是一个简单的问题而且我错过了重点,但我还没有达到我在语法方面领先的阶段.任何帮助将非常感激!

io haskell functional-programming list sudoku

3
推荐指数
1
解决办法
375
查看次数

数独算法 X 的时间复杂度是多少?

我在这里找到一个声明,即数独算法 X的时间复杂度为 O(N^3),其中 N 是棋盘大小。

这可能是合乎逻辑的,因为对于数独,要计算的二进制矩阵有 N^3 行。但这使得数独问题可以在多项式时间内解决,并且数独被称为 NP 问题,这意味着(据我所知)

  • 不可能总是在多项式时间内求解

  • 可以在多项式时间内验证解

那么数独算法 X 的时间复杂度是多少,是否有可能在多项式时间内解决数独问题?

谢谢!

algorithm knuth sudoku time-complexity

3
推荐指数
1
解决办法
1915
查看次数

JFormattedTextField未正确清除

我正在做这个任务,制作一个解决数独的程序.我有一个带有SudokuTextBox网格的面板,扩展了JFormattedTextField.我有一个MaskFormatter,因此每个文本框只接受一个整数.然后在我的面板中,当密钥被释放时,我有这个代码.

 public void keyReleased(KeyEvent e) {
  SudokuTextBox tb = (SudokuTextBox) e.getSource();
  int row = tb.getRow();
  int col = tb.getCol();
  int value = toInteger(tb.getText());
  //System.out.println(value);
  if(sudoku.isValid(row, col, value)) {
   sudoku.set(row, col, value);
  }
  else {
   sudoku.set(row, col, 0);
   tb.setText(null);
  }
  tb.setCaretPosition(0);
  sudoku.print();
 }
Run Code Online (Sandbox Code Playgroud)

问题是,如果我在文本框中放一个有效的值,然后我回去(由数独的规则),输入无效值的文本框被清除.但是当我向前选项卡时,前一个有效值显示在文本框中.我sudokumatrix包含所有已inputed不明确的价值像它应该这样,只有在相应的文本框中的数字.

当我将"SudokuTextBox扩展JFormattedTextField"更改为"SudokuTextBox extends JTextField"时,它更加令人困惑,它就像一个魅力.但我不能设置JTextField的大小,以便它是正方形,我不能强制每个文本框只有一个整数.

我错过了一些非常明显的东西吗

java keyevent sudoku jtextfield jformattedtextfield

2
推荐指数
1
解决办法
3636
查看次数

数独游戏构造函数

我在使用已定义的游戏初始化无参数构造函数时遇到问题.null如果我使用getter方法返回游戏,它会以某种方式继续返回.谁能告诉我什么是初始化游戏的最佳方法?

目前我正在从另一个具有静态方法的类中调用方法,但它似乎不起作用,因为null如果我得到游戏它会给出一个值.

这就是我这个游戏的方式:

           {{7,8,1,0,0,4,0,0,6},
            {2,0,9,3,6,0,1,0,0},
            {6,0,0,0,9,0,8,0,0},
            {0,0,0,0,3,5,0,0,0},
            {3,5,0,0,0,0,0,1,9},
            {0,0,0,4,2,0,0,0,0},
            {0,0,3,0,1,0,0,0,8},
            {0,0,7,0,8,3,4,0,1},
            {9,0,0,6,0,0,5,7,3}},
Run Code Online (Sandbox Code Playgroud)
public class SudokuPlayer
{
    private int [][]  game;
    public enum CellState { EMPTY, FIXED, PLAYED };
    private CellState[][] gamestate;

    private static final int GRID_SIZE=9;

    public SudokuPlayer()
    {
        int[][] copy= SudokuGames.getGame(4);
        int size = copy.length;
        int[][] game = new int[GRID_SIZE][GRID_SIZE];
        for ( int row = 0; row < size; row++)
        {
            for ( int col =0; col < size; col++)
            {
                game[row][col] = copy[row][col];
            } …
Run Code Online (Sandbox Code Playgroud)

java arrays 2d sudoku

2
推荐指数
1
解决办法
901
查看次数

更优雅的数学解决方案(Switch)声明

我目前正在开发一个Sudoku解决方案项目,通过从初学者到更高级的各种C++技能(一步一步)

我目前需要某种公式/解决方案来计算在数独9x9网格中找到的3x3网格中第一个"单元"的X和Y坐标.

如果数独网格的3x3部分编号如下:

|  0  |  1  |  2  |
|  3  |  4  |  5  |
|  6  |  7  |  8  | 
Run Code Online (Sandbox Code Playgroud)

目前,我能想到的最好的是一个开关/案例声明:

    switch(cubeNum) {
        case 0:
        case 1:
        case 2:
            startY = 0;
            break;
        case 3:
        case 4:
        case 5:
            startY = 3;
            break;
        case 6:
        case 7:
        case 8:
            startY = 6;
            break;
    }
    switch(cubeNum) {
        case 0:
        case 3:
        case 6:
            startX = 0;
            break;
        case 1:
        case 4:
        case 7:
            startX = 3;
            break; …
Run Code Online (Sandbox Code Playgroud)

c++ sudoku switch-statement

2
推荐指数
1
解决办法
279
查看次数