2013-06-11 4 views
0
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; 
    } 
} 

Вместо списка двойных массивов существует ли способ рандомизировать его, чтобы он работал как игра в судоку? Как и в нем нет дубликатов в столбцах или строках, и каждые три на три меньше сетки один раз использует число?Java: как рандомизировать список массивов без дубликатов

+3

Что вы хотите? Генератор судоку? Это не так просто, как «перетасовать и исключить числа, которые не совпадают» (хотя это не так сложно). Поиск проблемы с четырьмя королями – SJuan76

+2

Существует большое количество литературы по генераторам судоку. Вы огляделись? – Patashu

+6

Пожалуйста, придерживайтесь условных обозначений Java и начинайте переменные с небольшой буквы. Заглавные буквы предназначены для имен классов! –

ответ

1

Один из способов генерации случайных головоломок судоку будет выглядеть следующим образом:

  1. Генерировать случайные головоломки, удовлетворяющие ограничениям судоку головоломки
  2. Случайным подкачки цифры (например, заменить 2s с 3s, 7s с 1s, и т.д.)
  3. Случайные поменять местами столбцы и строки в пределах их набора 3 (например, поменять местами первый и третий столбец, или 5-й и 6-й)
  4. Случайным переключения наборов из 3 столбцов или строк с другим набором столбцов.

Хотя они будут похожи на разные головоломки, на самом деле они будут изотропными латинскими квадратами (т. Е. Все эквиваленты, поскольку они могут быть сведены к одной и той же головоломке путем изменения порядка строк/столбцов).

Если вы хотите получить более случайное решение, это, возможно, уже был дан ответ здесь: https://stackoverflow.com/a/6964044/2471910

Смежные вопросы