Benutzer mit den meisten Antworten
Algorithmus für Sudokus

Frage
-
Hallo,
ich bin gerade dabei ein Sudoku zu programmieren.
Bis auf die Sache, dass das Programm nicht in der Lage
ist "lösbare Sudokus und auch mit genügend Zahlen zu erzeugen",
(bei mir gehen bislang maximal 20). Ansonsten läuft aber schon alles
(Habe es an einem vorgegebenen Sudoku getestet).
Nun zu meiner Frage: Kennt vielleicht jemand einen Algorithmus, der
zufällig lösbare Sudokus erzeugen kann? Dabei sollen die vorgegeben Zahlen
erstmal manuell eingestellt werden können.
Gruß Volker
Antworten
-
Alles nur einzelne Ziffern? Keine zweistelligen?
Etwa sowas?
private void Form1_Load(object sender, EventArgs e) { string z = "1234567890"; foreach (char c in z) { MessageBox.Show(c.ToString()); } }
Wenn der String aus der Textdatei Zeilenumbrüche hat, kannst Du dieses auch "filtern", schau Dir mal die Methode Split() von System.String an.
Viele Grüße,
Thorsten
- Als Antwort markiert deppensido Dienstag, 6. Juli 2010 18:17
Alle Antworten
-
Hallo,
ich kenne mich da zwar nicht aus, aber auf die Schnelle mal gesucht:
http://www.codeproject.com/KB/game/SudokuPuzzle.aspx
http://www.codeproject.com/KB/game/SudokuGen.aspx?msg=2928863
http://www.codeproject.com/KB/game/sudoku.aspx
Viele Grüße,
Thorsten
-
Hallo,
Erstmal danke für die Links! Jedoch müsste ich mein sudoku von 0 beginnen, wenn ich
deren algorithmus benutzen möchte. Deshalb hab ich mir überlegt mittels einer Textdatei
fertige Sudokus vorzugeben, die ich zuvor nach folgendem format in die Textdatei eingegeben habe:
xxxxxxxxx
xxxxxxxxx
xxxxxxxxx
xxxxxxxxx
xxxxxxxxx
xxxxxxxxx
xxxxxxxxx
xxxxxxxxx
xxxxxxxxx
Dabei möchte ich jede Zahl nacheinander in ein Array übergeben, welches ich später mit meinen variablen versehe, die
prüfen, ob das sudoku erfolgreich gelöst wurde.
Nun meine Frage: Wie kann ich jede Zahl einzelnd, nacheinander einlesen lassen, sodass
ich jede Zahl dem array zuordnen kann?
Gruß Volker
-
Alles nur einzelne Ziffern? Keine zweistelligen?
Etwa sowas?
private void Form1_Load(object sender, EventArgs e) { string z = "1234567890"; foreach (char c in z) { MessageBox.Show(c.ToString()); } }
Wenn der String aus der Textdatei Zeilenumbrüche hat, kannst Du dieses auch "filtern", schau Dir mal die Methode Split() von System.String an.
Viele Grüße,
Thorsten
- Als Antwort markiert deppensido Dienstag, 6. Juli 2010 18:17
-
Hallo,
ja nur einzelne Ziffern mein ich.
Aber wie kann ich denn die Zeichen, die bei deinem
Beispielcode in char c gespeichert werden in ein Array übergeben.
Hier mal wie ich es versucht habe, er gibt aber nur leere zeichen aus.
private void Sudoku_erstellen()
{
StreamReader sr = new StreamReader(cb_auswahl.Text);
sudoku[0] = sr.ReadToEnd();
foreach (char c in sudoku[0])
{
for (int i = 0; i < sudoku.Length; i++)
{
sud[i] = c; //sud ist auch ein char Array
}
}
MessageBox.Show(sud[0].ToString());
MessageBox.Show(sud[1].ToString());
MessageBox.Show(sud[2].ToString());
MessageBox.Show(sud[3].ToString());
MessageBox.Show(sud[4].ToString());
}
Gruß Volker
-
hallo,
habs jetzt doch hinbekommen:
private void Sudoku_erstellen()
{
StreamReader sr = new StreamReader(cb_auswahl.Text);
sudoku[0] = sr.ReadToEnd();
sudoku[0].CopyTo(0, sud, 0, 81);
for (int i = 0; i < sud.Length; i++)
cb_auswahl.Items.Add(sud[i]);
}
Nun, hab ich was ich möchte. Aber troztdem danke!
Gruß Volker
-
Hallo, ich sehe, Du hast offensichtlich schon Deine Lösung gefunden, trotzdem hier:
string[] sudoku = new string[7]; public Form1() { InitializeComponent(); } private void Form1_Load(object sender, EventArgs e) { StreamReader sr = new StreamReader(cb_auswahl.Text); sudoku[0] = sr.ReadToEnd(); sr.Close(); char[] sud = new char[sudoku[0].Length]; int i = 0; foreach (Char c in sudoku[0]) { sud[i] = c; i++; } MessageBox.Show(sud[0].ToString()); MessageBox.Show(sud[1].ToString()); MessageBox.Show(sud[2].ToString()); MessageBox.Show(sud[3].ToString()); MessageBox.Show(sud[4].ToString()); }
Vergiss nicht, den StreamReader zu schließen (sr.Close())
Viele Grüße,
Thorsten