Bevor ich mit pureBasic-Code los lege :
Ich habe mir ein Überblick verschafft über Algorithmus für sudoku
und die PB-Programm beim mir ausgeführt.
http://www.purebasic.fr/german/viewtopi ... 12&t=15919
Die Ausführungszeit ist sehr langsam.
Ich habe überlegt wie ich ein sudoku + Lösung so realisieren kann:
A) ein fertigt gelöst sudoku (LOESUNG) erzeugen als Array
Dafür habe ich ein LösungsWeg (siehe unten).
Die Frage ist: wie eindeutig ist er?
B) einer Maske (MASKE) als 9X9 Array mit 0 und 1:
In Abhängigkeit der Schwierigkeitsgrad, werden 0 und 1 verteilt:
001 010 000
100 001 110
011 100 000
...
- Da habe ich mir noch keine Gedanke gemacht wie zu realisieren
C) Aus den Array LOESUNG werden die Zellen in eine neue Array (SUDOKU) übernommen, wen die dazugehörige Zelle aus den Array MASKE auf 1 gesetzt sind.
Die anderen Zellen bleiben leer.
Da habe ich mir auch keinen Gedanken gemacht.
Gibt eine PB-Funktion für so was?
Sonst noch offen ist für mich:
- Ist der erzeugt und zu lösende suduko lösbar?
- Gibt es eine eindeutige Lösung?
Hier mein Ansatz für A:
=======================
Das ganze 9x9-sudoku schreibe ich in ein 9x9 Array (Block).
Gedankliche, teile ich den sudoku in 3x3 Feldern (A .. I)
Eine Zelle ist ein Stelle mit ein Zahl (1 .. 9) in den array.
Und so sehe ich mein sudoku:
Code: Alles auswählen
+-+-+-+-+-+-+-+-+-+
| | | |
| A | B | C |
| | | |
+-+-+-+-+-+-+-+-+-+
| | | |
| D | E | F |
| | | |
+-+-+-+-+-+-+-+-+-+
| | | |
| G | H | I |
| | | |
+-+-+-+-+-+-+-+-+-+
1.) im Block A, E und I schreibe ich zufällige Zahlen von 1 .. 9
und bekomme z.B.:
Code: Alles auswählen
+-+-+-+-+-+-+-+-+-+
|4 2 6| | |
|1 7 9| | |
|8 5 3| | |
+-+-+-+-+-+-+-+-+-+
| |1 3 8| |
| |4 6 9| |
| |7 2 5| |
+-+-+-+-+-+-+-+-+-+
| | |3 8 6|
| | |5 2 9|
| | |7 1 4|
+-+-+-+-+-+-+-+-+-+
2.) in der Reihenfolge D, H, G, B, F und G schreibe ich zufällige Zahlen von 1 .. 9, welche in der Spalte und Zeile der dazugehörige Zelle nicht vorhanden sind und noch nicht in den zugehörige Block
Code: Alles auswählen
+-+-+-+-+-+-+-+-+-+
|4 2 6| | |
|1 7 9|< 4. |< 6. |
|8 5 3| v | v |
+-+-+-+-+-+-+-+-+-+
| ^ |1 3 8| |
| 1.> |4 6 9|< 5. |
| |7 2 5| v |
+-+-+-+-+-+-+-+-+-+
| ^ | ^ |3 8 6|
| 3.> | 2.> |5 2 9|
| | |7 1 4|
+-+-+-+-+-+-+-+-+-+
z.B für D
+-+-+-+-+-+-+-+-+-+
|4 2 6| | |
|1 7 9| | |
|8 5 3| | |
+-+-+-+-+-+-+-+-+-+
|7 9 2|1 3 8| |
|5 8 1|4 6 9| |
|6 3 4|7 2 5| |
+-+-+-+-+-+-+-+-+-+
| | |3 8 6|
| | |5 2 9|
| | |7 1 4|
+-+-+-+-+-+-+-+-+-+
Soweit so gut und Hilfen/Kommentaren erwünscht.
Merci et salut
Marcel