Chcę wygenerować całkowicie losowe Sudoku .
Zdefiniuj siatkę Sudoku jako siatkę liczb całkowitych od 1 do 9, w której niektóre elementy można pominąć. Siatka jest poprawną łamigłówką, jeśli istnieje wyjątkowy sposób jej wypełnienia, aby dopasować ją do ograniczeń Sudoku (każda linia, kolumna i wyrównany kwadrat 3 × 3 nie ma powtarzającego się elementu) i jest pod tym względem minimalna (tj. Jeśli już pominiesz element ma wiele rozwiązań).
Jak mogę wygenerować losową łamigłówkę Sudoku, tak aby wszystkie łamigłówki Sudoku były dostępne?
algorithms
randomness
sudoku
Justin
źródło
źródło
Odpowiedzi:
Generowanie dokładnego równomiernego rozkładu wszystkich łamigłówek sudoku można zrobić w ten sposób: możesz po prostu losowo wygenerować siatkę 9x9, a następnie zachować ją tylko, jeśli jest to poprawna siatka sudoku, w przeciwnym razie spróbuj ponownie.
Może widzisz, dokąd zmierzam: sprytne rozwiązanie tego problemu prawdopodobnie doprowadzi cię do zastanowienia się nad podstawowymi symetriami siatek sudoku. Dużo pracy wykonano w tym kierunku, aby udowodnić fakt, że 17 to minimalna liczba wskazówek do sudoku ( zobacz ten artykuł ) i możesz przejść tutaj, aby zobaczyć dokładne wyliczenie 5 472 730 538 klas 3 359 233 podobnych siatek, które wykorzystują te symetrie:
EDYCJA: aby dostosować to do niekompletnych łamigłówek, możesz losowo wybrać podzbiór swojej siatki, sprawdzić, czy rozwiązanie jest unikalne dzięki rozwiązaniu sudoku i spróbować ponownie, jeśli nie. To nie jest jednolity rozkład, ponieważ liczba niekompletnych łamigłówek z unikalnym rozwiązaniem może być różna dla dwóch siatek. (Inaczej byłbym bardzo zaskoczony)
źródło