Thread RDW 2007/7: Sudokulöser
(25 answers)
Opened by Ishka at 2007-03-21 03:24
Da bei meiner Lösung keine Beschreibung im Wiki ist, liefere ich diese hiermit nach.
Zuerst wird das Feld in zwei Arrays einsortiert, eines ist nach Zeilen das andere nach Spalten sortiert. In der folgenden While-Schleife wird nun die Reihenfolge festgelegt, in der der Brute-Force Algorithmus die Felder durchgeht. Dabei wird als erstes das Feld ausgewählt welches von den meisten, ausgefüllten Feldern beschränkt wird. Dies wird mit einer Null markiert, damit dies bei Feldern, die später in der Reihenfolge stehen, berücksichtigt werden kann. Der rekursive Brute-Force arbeitet nun die Felder in dieser Reihenfolge ab. Falls in ein Feld keine gültige Zahl mehr eingetragen werden kann, geht das Programm einen Schritt zurück. Sobald alle Felder gefunden wurden, gibt das Programm das gelöste Feld aus und bricht ab. Soll das SuDoKu auf Lösbarkeit bzw. Eindeutigkeit getestet werden, kann man das exit durch return ersetzen. $_=unpack"B*",~pack"H*",$_ and y&1|0& |#&&print"$_\n"for@.=qw BFA2F7C39139F45F78
0A28104594444504400 0A2F107D54447DE7800 0A2110453444450500 73CF1045138445F4800 0 F3EF2044E3D17DE 8A08A0451412411 F3CF207DF41C79E 820A20451412414 83E93C4513D17D2B |