Algorytm do obliczania ilości rozwiązań sudoku

0

Od jakiegoś tygodnia próbuje stworzyć funkcej która obilczała by czy dane sudoku ma więcje niz 1 rozwiązanie.
Niestety absolutnie mi to nie wychodzi i nie mam już pomysłów dlatego jeśli mógłby kotoś mnie naprowadzić lub pokazać przykładowy skrypt bylbym bardzo wdzięczny.
Potrzebuje tego do wygenerowania planszy sudoku. Mam w pełni uzupełnione sudoku w tablicy 9x9 i próbowałem po każdym kolejnym usuniętym numerku
rozwiązać sudoku i sprawdzac czy ma więcje niż 1 rozwiazanie ale niestety nie wyszukiwał mi wszystkich. Nawet na papierze mój algorytm pominoł 3/6 kombinacji.

A więc potrzebuje pomysłu/kodu(najlepiej w JS ewentualnie C#,C++ zawsze moge przełożyć) który sprawdzał by tablice 9x9 z lukami ile jest możliwych kombinacji
uzupełniających te luki zgodne z zasadami sudoku (bez powtórzeń w rzędzie, kolumnie, kratce 3x3).
Program:
1.Usunięcie jednej losowej liczby z tablicy 9x9. (To mam gotowe)
2.Sprawdzenie wszystkich możliwych wyników. ( O to prosze! )
3.Jeśli tylko 1 rozwiązanie 4; Jesli więcej przywróć usunięta liczbę i 1.
4.Jeśli liczba pozostałych w tablicy numerków jest równa poziomowi trudności: Gotowe ; Jeśli większa 1. ( To jest gotowe )

0

Po co chcesz sprawdzać liczbę rozwiązań, skoro z Twojego opisu wynika, że potrzebujesz tylko wiedzieć czy jest > 1? A właściwie to potrzebujesz funkcji, która rozwiązuje sudoku i jak trafi na moment, gdzie nie ma jednoznacznego pola to zwraca false.

0

Zgadzam się ale pozostaje kwestia wyszukania tej niejednoznaczności ale moja dotychcasowa metoda sie nie nadaje.
Stosowałem metode backtracking'u czyli uzupełniałem po kolei pola a kiedy nie można było uzupełnić to cofał się i zmieniał wartości dopuki nie udało się przejść dalej aż skończył.

0

Dobrze za implementowane musi działać. Dla danego x y sprawdzasz wszystkie linie pion, poziom i kwadrat czy nie ma szukanej liczby zwarcasz true false. I masz te funkcje.
Zapisujesz wszystkie wolne pola do tablicy. Dla każdego wolnego pola odpalasz DFS który zwraca true jeśli jest rozwiązanie. DFS działa rekurencyjnie i jest odpalany dla każdego wolnego pola do którego można wstawić liczbę. Jeśli wyskoczy Ci 2 razy true to wiesz ze plansza jest zła.

1 użytkowników online, w tym zalogowanych: 0, gości: 1