gpt4 book ai didi

java - 数独算法生成 0 个值

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:45:34 24 4
gpt4 key购买 nike

所以我有一个数独算法来生成一个完整的游戏板。问题是算法在某些情况下用完了可以放置在网格中的可能值,因此默认情况下它放置一个 0。

代码如下:

public void generateBoard() {
// Determine values for board
int r, d;

// For every slot in grid
for (int i = 0; i < 9; i++) {
for (int j = 0; j < 9; j++) {

// Create HashSet with values 1-9
for (int k = 1; k <= 9; k++) {
set.add(k);
}

checkRow(i);
checkCol(j);
checkBox(i, j);

// Create an iterator
Iterator<Integer> iterator = set.iterator();

// Add HashSet values to ArrayList via Iterator
while (iterator.hasNext()) {
d = iterator.next();
values.add(d);
}

try {
// Randomly choose from list of viable values to be put into slot
r = new Random().nextInt(values.size());
slots[i][j] = (Integer) values.get(r);
} catch (Exception e) {
e.printStackTrace();
//resetBoard();
//continue;

}

// Clear HashSet and ArrayList after slot is assigned value
values.clear();
set.clear();
}
}

}

public void checkRow(int i) {
for (int c = 1; c <= 9; c++) {
for (int a = 0; a < 9; a++) {
// If c value is already in row remove from HashSet
if (c == slots[i][a]) {
set.remove(c);
}
}
}
}

public void checkCol(int j) {
for (int c = 1; c <= 9; c++) {
for (int a = 0; a < 9; a++) {
// If c value is already in column remove from HashSet
if (c == slots[a][j]) {
set.remove(c);
}
}
}
}

public void checkBox(int i, int j) {
int xSet = (i - (i % 3));
int ySet = (j - (j % 3));

for (int c = 1; c <= 9; c++) {
for (int x = xSet; x < xSet + 3; x++) {
for (int y = ySet; y < ySet + 3; y++) {
// If c value is already in box remove from HashSet
if (c == slots[x][y]) {
set.remove(c);
}
}
}
}
}

这是生成的板的样子:http://imgur.com/2cWh61j

最佳答案

您的算法之所以失败,是因为它本身就是错误的。生成数独谜题比这更复杂。

有时用来创建谜题的快捷方式是硬编码一些正确的谜题,随机选择一个,打乱数字(将所有 X 与 Y 交换,反之亦然,等等)打乱行/列(不移动任何旧框外的数字)并沿框边界洗牌 3x9 和 9x3 区域。这样做会创建一个从数学角度来看在技术上与原始拼图相同的拼图,但对人类来说应该“感觉”足够独特。

另请记住,即使您拥有完整的棋盘,要确定可以安全移除哪些棋子而不产生模棱两可的谜题也有点棘手。天真的“随机移除 x 个图 block ”解决方案经常失败。

关于如何创建数独的另一个问题(有一些有用的答案)可以在这里找到:How to generate Sudoku boards with unique solutions

关于java - 数独算法生成 0 个值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25039731/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com