这个程序的作用:
这个程序从一个类中获取值,并使用这些值作为数独游戏的起始值。我们将在一个典型的数独9x9网格中打印这些内容。然后,程序会提示用户在网格上给出一个坐标点,并在其中输入一个值。目前我正在做的是确保用户输入的值对解决这个难题是有效的。填好拼图后,每列、每行和3x3方块中不再有任何重复值,游戏应结束,输出应为“拼图完成”。
到目前为止,我的程序成功地检查了列和行中的重复值,但我不知道从哪里开始检查每个3x3正方形。
此拼图的数字保存在9x9数组中。
基本上:关于如何检查数组中每个3x3部分的重复值,有什么建议吗?
大约4年前,我用C编写了以下代码来解决完全相同的问题,但它看起来就像蛮力y一样。int数组是一个9x9网格。“索引”指定0...第8行、0...第8列和0...第8个框。
int checkBox(int a[][9], int index)
{
int i, j, isValid = 1;
int m, n;
for(i = 3*(index%3) ; isValid && (i < (3*(index%3) + 3)); i++)
{
for(j = 3*(index/3); isValid && (j < (3*(index/3) + 3)); j++)
{
for(m = (3*(index%3)) ; isValid && (m < (3*(index%3) + 3)); m++)
{
for(n = 3*(index/3); isValid && (n < (3*(index/3) + 3)); n++)
{
if(isValid && (a[m][n] == 0) || ((i != m) || (j != n)) && (a[i][j] == a[m][n])) //select given element and compare others to it
{ //if any element is the same that is not itself then the sudoku is not valid
isValid = 0; //this checks for 3x3 box
}
}
}
}
}
return isValid;
}
基本上,我所做的只是操纵索引,直到它选择了一个特定的框,在那个框中,我检查了所有数字,看看是否有任何匹配。如果有匹配,数独就无效。
最后,我这样检查了有效性:
int checkSudoku(int a[][9]) //check every row, column and box
{ //if there is no contradiction then it is valid
int i, isValid = 1;
for(i = 0; isValid && (i < 9); i++)
{
isValid = (checkLine(a, i) && checkColumn(a, i) && checkBox(a, i));
}
return isValid;
}
当然,同样的概念也适用于Java,因为它只是数组管理。
这取决于你如何存储数独板。如果将其存储为二维数组,则可以让逻辑标识用户选择输入新值的3x3框,并使用已经检查行和列部分的代码。
你还可以收集9套。每一组对应一个特定的3x3区块。因此,当用户选择他/她想要添加值的位置的坐标时,您将选择给定的集合,并在集合中执行add
操作。
由于集合不允许重复,如果集合中已经存在数字,add
方法将返回false
。这也将允许您识别任何重复的值(但是,与数组选项不同,如果用户选择从3x3网格中删除值,您还需要更新集合)。
我要做的不是一个大的9x9数组,而是存储一个由3x3个数字数组组成的3x3数组。或者两者都做,以便于计算(再存储81字节的数据(我希望字段使用字节吗?)这不会在所有的设备上造成内存问题(除了内存不足最多的设备,我怀疑你是否愿意在这样的设备上玩游戏)。
我曾经用C语言编写过一个数独谜题,但我陷入了一个问题:检查每个3x3网格是否没有重复的值。这是我的代码: 我知道在function Valid中,我应该有条件检查每个3x3网格,但我没有弄明白:我找到了创建一些变量开始和结束的解决方案,每个变量得到如下结果: 在我的例子中,i和j是ii和jj。 例如,我们发现了这样的东西: 我试过这个密码,但没用。 我不明白这一点:我有下一个数独矩阵: 如果我的代
我已经创建了一个程序,允许用户输入一个数独拼图的所有值,即9x9,将这些值存储在一个数组中,并可以检查所有行和列中的值是否不同,但我很难理解如何实现代码来关注3x3的每个子网格。我想我必须有最后一个嵌套for循环,它可能被3除,但我完全被这部分卡住了。 }
我正在编写一个Android应用程序,从图片中提取数独谜题。对于9x9数独网格中的每个单元格,我需要确定它是包含数字1到9中的一个还是空白。以下是我的算法的大致要点: 自适应阈值拼图 扩展以减少要考虑的轮廓数 找到拼图的轮廓并将其扭曲成正方形 将正方形分成81个相等的单元格;寻找至少有20%白色像素的单元格 找到最靠近这些单元格中心的白色斑点并得到其边界矩形 对边界矩形内的图像部分使用字符识别(k
以下是我的方法: 我做了一个9x9二维整数数组来拼图。0表示只有一个空格。该方法检查每个3x3的正方形,并说明是否在其中一个正方形中发现了重复。但有时它仍然会说,有比赛时没有比赛。有人能看出哪里出了问题吗?
我已经用Python为非常简单的数独问题编写了一个数独解算器。它的工作原理是检查每个空方块,如果只有一个可能的数字是合法的,则用该数字替换空方块。一旦它完成了整个拼图,如果仍然有1个以上的空方块,它会再次调用新的拼图。我遇到问题的部分是,我希望解算器在每次调用结束时检查谜题是否与调用开始时相同,如果没有更改,这意味着所有剩余的空方块都有超过1个可能值,因此解算器应返回False,以指示解算器无法解
当我试图检查数独的行中是否有重复的元素时,结果什么也没有返回。不知道代码是否正确。如果在一行中找到重复的元素,则需要打印找到的重复项。使用方法帮助我找到解决方案。