这是这个问题的后续问题:
从给定的行(x)和列(y)中,找到2D 9x9阵列的3x3子阵列
我正在写一个方法,它采用二维数组的行、列组合,扫描行、列和3x3子数组,在这个特定位置寻找可能的解决方案。到目前为止,一切看起来都很好。第一个for循环扫描行,并将已使用的数字(1-9之间)存储在一个alreadyInUse数组中。第二种方法也适用于列。第三个for循环使用行、列组合确定子数组的位置,搜索这个3x3子数组,并将已经找到的数字存储在同一个alreadyInUse数组中。
// Method for calculating all possibilities at specific position
public int[] getPossibilities(int row, int col){
int [] alreadyInUse;
int [] unsorted = new int[9];
int currentIndex = 0;
int size = 0;
boolean match;
if(sudoku[row][col] != 0){
return new int[]{sudoku[col][row]};
}
else{
alreadyInUse = new int[26];
//Go into Row x and store all available numbers in alreadyInUse
for(int i=0; i<sudoku.length; i++){
if(sudoku[row][i] !=0){
alreadyInUse[currentIndex] = sudoku[row][i];
currentIndex++;
}
}
//Go into Column y and store all available numbers in alreadyInUse
for(int j=0; j<sudoku.length; j++){
if(sudoku[j][col] !=0){
alreadyInUse[currentIndex] = sudoku[j][col];
currentIndex++;
}
}
//Go into subarray and store all available numbers in alreadyInUse
int x_left = row - (row%3);
int y_top = col - (col%3);
for(int i=0; i<3; i++){
for(int j=0; j<3; j++){
if(sudoku[i+x_left][j+y_top] != 0){
alreadyInUse[currentIndex] = sudoku[i+x_left][j+y_top];
}
}
}
//compare 1-9 with the numbers stored in alreadyInUse array
for(int i=1; i<10; i++){
match = false;
//if a pair matches, break;
for(int j=0; j<alreadyInUse.length; j++){
if(alreadyInUse[j] == i ){
match = true;
break;
}
}
//If no pair matches, store the number (i) in an unsorted array
if(!match){
size++;
unsorted[i-1] = i;
}
}
//Re-use alreadyInUse array
alreadyInUse = new int[size];
size = 0;
//Remove the zeros and store the rest of the numbers in alreadyInUse array
for(int i=0; i<unsorted.length; i++){
if(unsorted[i] != 0){
alreadyInUse[size] = unsorted[i];
size++;
}
}
return alreadyInUse;
}
}
当我像这样测试输出时:
public class SudokuTest {
public static void main(String[] args){
Sudoku sudoku;
String sud = "250030901010004000407000208005200000000098100040003000000360072070000003903000604";
sudoku = new Sudoku(sud);
System.out.println(sudoku.getPossibilities(3,4));
我得到这个作为输出:[I@659e0bfd
,即使调试显示我已经Inuse数组包含正确的值。有人能在这里帮忙吗?
您不能直接打印int数组。您需要:
import java.util.Arrays;
...
System.out.println(Arrays.toString(sudoku.getPossibilities(3,4)));
我正在做一个小的个人数独游戏,并试图扩展它。 到目前为止,我使用递归回溯方法使“Solve”部分正常工作,每当它设法解决递归时,就会返回true。 现在我正在尝试构建一个独特的解决方案板生成器,我在网上找到了很多关于如何实现它的信息。 然而,我在第一步很挣扎,这是我的布尔递归回溯算法变成一个递归算法,它保留了一个可能解决方案的计数。这对于检查我生成的板是否是唯一的至关重要。 更重要的是,我意识到我
如何在java摆中从第二个JFrame获取数据?我有一个带有JLabel和JButton的帧。单击JButton时,它会打开另一个带有自定义日历的帧。我想选择日期(通过JButton)并将日期放在主JFrame的JLabel中。我不想创建第一帧的新实例,因为还有其他用户可能键入的我不想删除的信息。
本文向大家介绍用Python解数独的方法示例,包括了用Python解数独的方法示例的使用技巧和注意事项,需要的朋友参考一下 芬兰数学家因卡拉花费3个月时间设计出的世界上迄今难度最大的数独。数独是 9 横 9 竖共有 81 个格子,同时又分为 9 个九宫格。规则很简单:每个空格填入 1~9 任意一个数字,需要保证每个横排和竖排以及九宫格内无相同数字。 解数独是一个可有可无的爱好,知道这个益智游戏,但
我正在尝试使用Java解决一个数独难题。目前该类无法正确解数独。 此类尝试在9x9矩阵中查找0(空格),并在列表中记下0的位置,以供以后参考。然后,它将使用这些位置来求解该0。不幸的是,它似乎不像我希望的那样起作用。 这是我使用的9x9矩阵: 这个9x9矩阵中有51个0,但是当它解决这个难题时,出于某种奇怪的原因,它会附加66个位置。我似乎无法准确指出问题所在。任何帮助都将不胜感激! 这是它尝试的
问题内容: 我有1100、1002、1022等数字。我想使用单个数字,例如,对于第一个数字1100,我希望具有1、1、0、0。 如何用Java获取它? 问题答案: 为此,你将使用(mod)运算符。 mod运算符将为你提供对int进行除法运算的其余部分。 所以, 因为: 注意:如Paul所述,这将为你提供相反的数字。你将需要将它们压入堆栈并以相反的顺序弹出。 代码以正确的顺序打印数字: