我正在尝试用Java(也许是Python)创建一个数独求解器程序.我只是想知道如何构建这个......
我是否创建了一个类并使每个框成为该类的对象(9x9 = 81个对象)?如果是,我如何控制所有对象 - 换句话说,如何让它们全部调用类中的某个方法?
我是否只是创建函数来计算并控制其中的所有数字,例如多维数组?
实际上,即使我可以创建多个函数,如果我要将每个对象作为对象,我将如何控制所有对象?
谢谢.
我正在写一个数独的回溯解算器,它已经卡住了,我不明白为什么.我认为我的递归调用没问题.我错过了什么?
输入从input.txt文件中读取,网格初始布局在一行中:
input.txt中:
004020000201950070090004852005490001006000900800051300958100020010072608000080500
Run Code Online (Sandbox Code Playgroud)
编辑:我的意思是"卡住",因为没有完成它对网格的解决
这是一个示例输出:
current move count is 6
3 6 4 7 2 8 1 9 0
2 0 1 9 5 0 0 7 0
0 9 0 0 0 4 8 5 2
0 0 5 4 9 0 0 0 1
0 0 6 0 0 0 9 0 0
8 0 0 0 5 1 3 0 0
9 5 8 1 0 0 0 2 0
0 1 0 0 7 2 …Run Code Online (Sandbox Code Playgroud) 我在Haskell写了一个数独求解器.它通过一个列表,当它找到'0'(一个空单元格)时,它将获得可以适合的数字并尝试它们:
import Data.List (group, (\\), sort)
import Data.Maybe (fromMaybe)
row :: Int -> [Int] -> [Int]
row y grid = foldl (\acc x -> (grid !! x):acc) [] [y*9 .. y*9+8]
where y' = y*9
column :: Int -> [Int] -> [Int]
column x grid = foldl (\acc n -> (grid !! n):acc) [] [x,x+9..80]
box :: Int -> Int -> [Int] -> [Int]
box x y grid = foldl (\acc n -> (grid !! n):acc) [] [x+y*9*3+y' | y' …Run Code Online (Sandbox Code Playgroud) 目前我正在尝试创建一个程序,它将从头开始自动生成一个完整的数独板,虽然相同的功能可以通过微小的改动来解决部分填充的数独板.问题是,当你在板上加载一个新的数字时,你显然必须检查这个数字是否已经存在于同一列或行中,而且也是在加载它的3x3方块中.对程序的一部分使用嵌套的switch语句,你必须根据相同的3x3方格中的数字检查数字,尽管break语句都显示在正确的位置.compliler说的是第二个case语句的第一个数字,它是嵌套switch语句的一部分:"Error:case标签值已经出现在这个开关中",即使数字没有,问题是为什么?
这是代码:
bool SudokuClass::checkPresentGrid(int &temporary, int row, int column)
{
bool indicator;
switch (row)
{
case 0 || 3 || 6: //If the number is being loaded into row 0,3 or 6
switch (column)
{
case 0 || 3 || 6: //Check all other spaces in the same 3x3 grid
if (temporary == (completeSudoku[row + 1][column + 1] || completeSudoku[row + 1][column + 2] || completeSudoku[row + 2][column + 1] || completeSudoku[row + 2][column + 2]))
{
indicator = true; …Run Code Online (Sandbox Code Playgroud) 假设我有以下数独:
problem <- matrix(c(
5, 3, 0, 0, 7, 0, 0, 0, 0,
6, 0, 0, 1, 9, 5, 0, 0, 0,
0, 9, 8, 0, 0, 0, 0, 6, 0,
8, 0, 0, 0, 6, 0, 0, 0, 3,
4, 0, 0, 8, 0, 3, 0, 0, 1,
7, 0, 0, 0, 2, 0, 0, 0 ,6,
0 ,6 ,0 ,0 ,0 ,0 ,2 ,8 ,0,
0 ,0 ,0 ,4 ,1 ,9 ,0 ,0 ,5,
0 ,0 ,0 ,0 …Run Code Online (Sandbox Code Playgroud) 我想将文本字段添加a01, a02, ...到数组中a.我想显示值,val以便我知道文本是从文本字段中获取的.此代码不显示任何错误,但是,它也不会给我输出.
int i, j;
JTextField[][] a = new JTextField[9][9];
int[][] val = new int[9][9];
for (i = 0; i < 9; i++)
{
for (j = 0; j < 9; j++)
{
val[i][j] = Integer.parseInt(a[i][j].getText());
System.out.println(val[i][j]);
}
}
Run Code Online (Sandbox Code Playgroud)
这是我在这里提出的问题.
所以基本上,我试图通过将回溯作为一个学习项目来使用 Python 3 创建一个数独求解器,所以我还没有达到完美的效率(我将在之后重写它以试图让它变得更好,我使用了多余的变量和其他随机的东西),只是让它工作。然而,当我在处理它时,调试变得越来越困难,我想随着它的进行更好地格式化我正在使用的网格,但是我真的不知道该怎么做。这就是我现在存储它的方式:
grid = [
[4, 0, 0, 0, 0, 5, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 1, 9, 8],
[3, 0, 0, 0, 8, 2, 4, 0, 0],
[0, 0, 0, 1, 0, 0, 0, 8, 0],
[9, 0, 3, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 3, 0, 6, 7, 0],
[0, 5, 0, 0, 0, 9, 0, 0, 0],
[0, 0, 0, 2, 0, 0, 9, 0, 7],
[6, …Run Code Online (Sandbox Code Playgroud) 说我有一个像这样的数组:
array_1 = [0, 0, 1, 2, 3, 0]
Run Code Online (Sandbox Code Playgroud)
另一个像这样:
array_2 = [4, 5, 6]
Run Code Online (Sandbox Code Playgroud)
如何创建这样的数组,使得其中的每个0 array_1都被?的第一个和后续元素替换array_2:
[4, 5, 1, 2, 3, 6]
也就是说,每次我们0在第一个数组中遇到a 时,我们都想用它的结果替换它array_2.shift.
这是我的第一篇文章,所以如果我做错了,我深表歉意。几个月前我开始使用 Python 编写代码,现在已经转向 C#。为了学习回溯,我尝试编写数独求解器。但是,在我的一生中,我无法理解为什么我的代码不起作用。当然,有很多解决方案。我觉得现在对我来说进步的最好方法是了解我的个人代码中缺少什么。所以,如果你有时间:
为什么我的代码不会返回已解决的数独板?我怀疑问题出在递归上。
主要程序:
using System;
namespace Sudoku
{
class Program
{
static void Main(string[] args)
{
var sudokuTemplate = new SudokuTemplate();
var sudoku = sudokuTemplate.CreateSudoku();
Print.print(sudoku);
Console.WriteLine();
Print.print(driver(sudoku));
}
static int[,] driver(int[,] board)
{
var check = new ErrorCheck();
for (int i = 0; i < 9; i++)
{
for (int j = 0; j < 9; j++)
{
if (board[i,j] == 0)
{
for (int n = 1; n <= 9; n++)
{
if (check.legal(board, i, …Run Code Online (Sandbox Code Playgroud) sudoku ×9
algorithm ×2
backtracking ×2
java ×2
solver ×2
arrays ×1
c# ×1
c++ ×1
formatting ×1
haskell ×1
list ×1
matrix ×1
nested ×1
netbeans ×1
optimization ×1
performance ×1
python ×1
python-3.x ×1
r ×1
ruby ×1
sorting ×1