gpt4 book ai didi

Java:如何在没有重复的情况下随机化数组列表

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:30:36 26 4
gpt4 key购买 nike

import java.util.Random;

public class Sudoku {
int[][] SquareNumbers = {
{ 4, 3, 5, 8, 7, 6, 1, 2, 9 }, { 8, 7, 6, 2, 1, 9, 3, 4, 5 }, { 2, 1, 9, 4, 3, 5, 7, 8, 6 },
{ 5, 2, 3, 6, 4, 7, 8, 9, 1 }, { 9, 8, 1, 5, 2, 3, 4, 6, 7 }, { 6, 4, 7, 9, 8, 1, 2, 5, 3 },
{ 7, 5, 4, 1, 6, 8, 9, 3, 2 }, { 3, 9, 2, 7, 5, 4, 6, 1, 8 }, { 1, 6, 8, 3, 9, 2, 5, 7, 4 } };

Random Digits = new Random(); // random numbers to exchange Rows
Random HiddenNumbers = new Random();
int Grid[][] = new int[9][9];

public int[][] Generator() {
for (int x = 0; x < Digits.nextInt(); x++) {
for (int da = 0; da < 3; da++) {

}
}

return SquareNumbers;
}

int[][] Hide() {
for (int i = 0; i < 9; i++)
for (int j = 0; j < 9; j++)
Grid[i][j] = SquareNumbers[i][j];

int Row, Columns, Concealer;

Concealer = 55 + Digits.nextInt(1);

for (int i = 0; i < Concealer; i++) {
Row = HiddenNumbers.nextInt(9);
Columns = HiddenNumbers.nextInt(9);
Grid[Row][Columns] = -1;
}
return Grid;
}

public int[][] getSquareNumbers() {
return SquareNumbers;
}

public void setSquareNumbers(int[][] SquareNumbers) {
this.SquareNumbers = SquareNumbers;
}

private static Sudoku instance = null;

protected Sudoku() {
// Exists only to defeat instantiation.
}

public static Sudoku getInstance() {
if (instance == null) {
instance = new Sudoku();
}
return instance;
}
}

有没有办法将其随机化以使其像数独游戏一样运行,而不是双数组列表?因为它在列或行中没有重复项,并且每三乘三的较小网格使用一个数字一次?

最佳答案

生成随机数独谜题的一种方法如下:

  1. 生成一个满足数独谜题约束的随机谜题
  2. 随机交换数字(例如,将 2 替换为 3,将 7 替换为 1,等等)
  3. 在他们的一组 3 中随机交换列或行(例如,交换第一列和第三列,或第五列和第六列)
  4. 随机切换 3 列或行的集合与另一组列。

虽然这些看起来像是不同的谜题,但实际上它们都是各向同性的拉丁方(即所有等价物,因为它们可以通过重新排列行/列来简化为相同的谜题)。

如果你想要一个更随机的解决方案,这可能已经在这里得到回答:https://stackoverflow.com/a/6964044/2471910

关于Java:如何在没有重复的情况下随机化数组列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17034947/

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