• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Generowanie sudoku o zadanej liczbie cyfr

Object Storage Arubacloud
0 głosów
1,129 wizyt
pytanie zadane 23 października 2019 w C i C++ przez chemikos Nowicjusz (230 p.)

Cześć

Ostatnio siedzę nad algorytmem generowania sudoku o podanej przez użytkownika liczbie widocznych cyfr na starcie gry. Problemem jest wygenerowaniem planszy z liczbą cyfr mniejszą niż 21, do tej pory ani razu taka plansza się nie utworzyła. Przy liczbie 20 program szukał ok. godziny i nie udało się, natomiast dla 21 trwa to ok. minuty. Dodam, że minimalna liczba cyfr to 17, żeby plansza mogła mieć tylko jedno rozwiązanie.

Zasada generowania:

1. utworzenie losowej poprawnej planszy (wszystkie liczby)

2. wylosowanie 'randnum' liczb, które maja być widoczne, czyli ich współrzędnych na planszy z pkt.1 ('randnum' podane przez użytkownika)

3. utworzenie planszy z widocznymi liczbami i sprawdzenie czy taka plansza ma jedno rozwiązanie, jeśli nie, to wróć do pkt. 1

sprawdzenie planszy - algorytm rozwiązuje po kolei puste pola od [1][1], [1][2] ... do ...  [9][8],[9][9] sprawdza liczby 1->9, potem rozwiązuje dla liczb 9->1, następnie rozwiązuje pola od [9][9], [9][8] ... do ...  [1][2],[1][1] sprawdza liczby 1->9, potem rozwiązuje dla liczb 9->1

po każdym rozwiązaniu następuje sprawdzenie czy rozwiązana plansza jest identyczna z planszą z pkt1. - jeżeli NIE, to znaczy, że jest więcej rozwiązań niż 1 i powrót do pkt 1; jeżeli TAK - to sprawdza dalej

Zakładam, że takie czterokrotne sprawdzenie planszy jest wystarczające, ale pewności nie mam. Może ktoś z Was ma inny pomysł na sprawdzenie czy dana plansza ma tylko jedno rozwiązanie?

4. Do tego momentu metoda działała zadowalająco tylko dla liczb >= 30, a dla 25 plansza nie chciała się utworzyć.

Konieczne było wprowadzenie algorytmu sprawdzającego (czy ma jedno rozwiązanie) po usunięciu pojedynczej liczby z planszy (dla liczb mniejszych od założonego limitu (stała LIMIT=35)).

Udało się uzyskać akceptowalne wyniki nawet dla liczby 23 (ale to zależy od szczęścia, hehe).

 

Generalnie dla wartości przy których generowanie planszy trwa zbyt długo (powyżej 2s) można wygenerowane wcześniej plansze zapisać do pliku, a w finalnej aplikacji wczytać taką planszę, tylko takie rozwiązanie mnie nie satysfakcjonuje. No i pozostaje brak plansz <21.

Czy może ktoś wie jak sobie z tym poradzić? 

Żeby chociaż program dał radę takie plansze wygenerować.

 

A to link do githuba, jakby ktoś chciał zobaczyć kod: smiley

https://gist.github.com/chemikos/477bf33fc7d3b6dd2c60e3137f5aff08

 

 

pozdrawiam

chemikos

 

Zaloguj lub zarejestruj się, aby odpowiedzieć na to pytanie.

Podobne pytania

–1 głos
1 odpowiedź 1,616 wizyt
pytanie zadane 17 kwietnia 2019 w C i C++ przez mctyskie Początkujący (320 p.)
+2 głosów
1 odpowiedź 467 wizyt
pytanie zadane 7 sierpnia 2019 w Algorytmy przez piotrsz109 Stary wyjadacz (13,730 p.)
0 głosów
1 odpowiedź 3,838 wizyt
pytanie zadane 24 października 2017 w C i C++ przez WRCol Nowicjusz (120 p.)

92,576 zapytań

141,426 odpowiedzi

319,650 komentarzy

61,961 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...