Sudoku megoldó C#?
Sziasztok!
Próbálok írni egy Sudoku megoldó programot. Már írtam egyet, de az a nehezebb sudokukat nem tudja megoldani, és utánanéztem a googlen, és valami backtrack módszert kell alkalmazni, ami minden a sudokut meg tud csinálni.
Le tudnátok írni, hogy ez hogyan működik, és esetleg egy példakódot, hogy tanulmányozhassam?
![*](http://static.gyakorikerdesek.hu/p/vsz2.png)
![*](http://static.gyakorikerdesek.hu/p/vsz2.png)
![*](http://static.gyakorikerdesek.hu/p/vsz2.png)
![*](http://static.gyakorikerdesek.hu/p/vsz2.png)
![*](http://static.gyakorikerdesek.hu/p/vsz1.png)
Az lényegébe mindegy hogy C#, C++ ... stb prog. nyelven implementálod, az elv ugyan az. A backtrack lényegét kell megértened.
Amit a sudoku-nál csinál a backtrack (visszalépéses keresés):
Kezdetbe van a feladvány tábla. Egy bool vanmegoldas változót beállítunk false-ra ami azt tárolja hogy van e megoldás.
A pillanatnyilag "látott" legelső üres cellába írjük be egy pillanatnyilag legális értéket (a sorába oszlopába,blokkjába, nem "látunk" olyat) ha több ilyen is van akkor ezek közül válasszuk az aktuálisan legkisebbet, ha nincs akkor lépjünk vissza (ha van előző) az előző kitöltendő cellára, és "játszuk" el ugyan ezt úgy hogy előzőleg vett elemnél közvetlenül nagyobb elemet írjunk be, ha nincs előző kitöltendő cella akkor vége az algoritmusnak.
Ha van beírható pillanatnyilag legális érték és
nincs következő akkor találtunk megoldást a vanmegoldas valtozót true-ra állítjuk. (Ekkor lehet úgy implementálni hogy vége az algoritmusnak vagy lehet úgy is hogy nincs vége hanem számol tovább mintha mi se történt volna megtalálja az összes megoldást amit egy listába összegyűt vagy halmazba vagy file-ba stb. részletkérdés. Ami az metro újságba van feladat annak 1 megoldása szokott lenni.)
Fontos hogy a "látott" szó idéző jelbe van. Balról jobbra haladva és lefele mint ahogy olvasunk sorszámozzuk a cellákat.
Az alacsonyabb sorszámú cellák a magasabb sorszámú olyan cellákat amit a backtrack algoritmus tölt ki mindig üresnek kell hogy lássa, a többi cellát meg kitöltöttnek kell hogy lássa.
A magasabb sorszámú cellák az alacsonyabb sorszámú backtrack algoritmus által kitöltött cellákat és az a táblában eredetileg kitöltött cellákat kitöltöttnek kell hogy lássa, nem kell tudnia megkülönböztetni.
Tulajdonképpen egy rekurzív algoritmusról van szó.
Sikerült megírni:)
Igaz nem a leggyorsabb, de bármilyen sudokut 20mp alatt megold:)
Kapcsolódó kérdések:
Minden jog fenntartva © 2025, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!