Випадковий генератор судоку


13

Я хочу створити абсолютно випадковий судоку .

Визначте сітку судоку як сітку цілих чисел між 1 і 9, де деякі елементи можна опустити. Сітка - це дійсна головоломка, якщо існує унікальний спосіб її завершення, щоб він відповідав обмеженням судоку (кожен рядок, стовпець і вирівняний 3 × 3 квадрат не має повторюваного елемента) і в цьому відношенні є мінімальним (тобто якщо ви пропустите більше елемент головоломки має кілька рішень).9×9193×3

Як я можу генерувати випадкову головоломку судоку, щоб усі головоломки судоку були однозначними?


Це виглядає як життєздатне рішення: dryicons.com/blog/2009/08/14/…
Джо,

1
Зараз щодо цього існує мета питання . Будь ласка, обговоріть там чи в чаті.
Кевін

Відповіді:


15

Генерація точного рівномірного розподілу всіх головоломок судоку може бути виконана таким чином: ви можете просто довільно генерувати сітку 9x9, а потім зберігати її лише, якщо це правильна сітка судоку, інакше повторіть спробу.

917

[1,2,..9]9!

Можливо, ви бачите, куди я йду: розумний відповідь на цю проблему, ймовірно, змусить вас задуматися про основні симетрії сіток судоку. У цьому напрямку було зроблено багато роботи, щоб довести той факт, що 17 - це мінімальна кількість доказів до судоку ( див. Цю статтю ), і ви можете зайти сюди, щоб побачити це точне перерахування 5 472 730 558 класів з 3 359 222 подібних сіток, який використовує ці симетрії:

  1. Перестановки цифр
  2. Перестановки рядків (смуги та рядки всередині кожного діапазону)
  3. Те ж саме для стовпців
  4. Транспозиція

9!,64,64,2

EDIT: щоб пристосувати це до неповних головоломок, ви можете випадковим чином вибрати підмножину вашої сітки, перевірити, чи рішення унікальне з вирішувачем судоку та повторіть спробу, якщо ні. Це не є рівномірним розподілом, оскільки кількість неповних загадок з унікальним рішенням може бути різною для двох сіток. (Я був би дуже здивований інакше)


Але Джастін просить створити неповну головоломку таким чином, щоб існував унікальний спосіб її виконання. Навіть якщо ви генеруєте сітку 9х9, яка задовольняє обмеження судоку, не ясно, чому видалення певного підмножини комірок дасть вам загадку, яку можна виконати унікальним чином.
Янома

1
@Janoma: о, шкода, я відредагую. Але це не дуже змістовно, якщо не визначити, що таке правильна загадка. (Чи є сітка із лише однією порожньою коміркою пазлом?). Ми хочемо мінімальної сітки (тобто якщо ви видалите цифру, рішення вже не унікальне?) Це цікаве питання.
jmad

"Деякі елементи можна опустити" досить точні (тобто "один або більше" елементів можна видалити). Наприклад, дійсна головоломка з однією порожньою коміркою може бути виконана унікальним чином, тоді як порожня головоломка не може, оскільки існує більше ніж одна дійсна головоломка. Також завершена дійсна головоломка може бути виконана унікальним (тривіальним, порожнім) способом. Питання щодо мінімальної сітки теж цікаве, але відмінне від цього.
Янома

@Janoma, jmad: дійсна головоломка зазвичай мінімальна, я забув це згадати.
Жил 'ТАК - перестань бути злим'

@Gilles Це визначення? Цікаво, чи це насправді намічене значення ОП. Це ускладнює проблему набагато складніше :-)
Janoma
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.