Entwickler-Ecke
Delphi Language (Object-Pascal) / CLX - sudoku füllen mithilfe von mengen
greendesire - Fr 20.03.09 19:40
Titel: sudoku füllen mithilfe von mengen
ich programmiere grad Sudoku und habe es jetzt geschafft, dass das sudoku in den senkrechten spalten zahlen von 1-9 enthält, die nicht doppelt sind.
allerdings sind dann die zahlen in den waagerechten Zeilen doppelt.
ich bekomme irgendwie immer eine endlosschleife.
kann mir irgendwer sagen, was ich falsch mache?
hier der quelltext mit der endlosschleife, wenn man das mit (zahl in mengew[j]) und mengew[j]:=mengew[j]+[zahl]; weglässt, funktioniert es immerhin für die senkrechten.
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20:
| var mengeS,mengeW: array[0..8] of set of byte; . . . with Stringgrid1 do Begin
for i:=0 to 8 do Begin for j:=0 to 8 do Begin Repeat cells[i,j]:=IntToStr(random(9)+1); zahl:=StrToInt(cells[i,j]); Until not ((zahl in menges[i]) or (zahl in mengew[j])); menges[i]:=menges[i]+[zahl]; mengew[j]:=mengew[j]+[zahl]; end; end; end; |
Jann1k - Fr 20.03.09 20:00
ich schätze mal es liegt daran, dass du menes und mengew nie leerst
greendesire - Fr 20.03.09 20:19
doch das hab ich wohl vergessen hinzuschreiben.
hab vorher noch stehen
Delphi-Quelltext
1: 2: 3: 4:
| for i:=0 to 8 do menges[i]:=[]; for j:=0 to 8 do mengew[j]:=[]; |
ich weiß nur, dass es passieren kann, wenn er zufällig zahlen einfügt, kann irgendwann das problem entstehen, dass z.b. wenn die zeile 123 456 78x ist aber in der senkrechten zeile die fehlende 9 schon vorkommt, er endlos eine zahl sucht, die da reinpasst aber nicht finden kann, da die 9 ja dann schon in der senkrechten zeile ist
aber ich weiß nicht wie ich verhindern kann, dass das passiert
lg
Moderiert von
Narses: Delphi-Tags hinzugefügt
Narses - Fr 20.03.09 20:24
Moin und :welcome: im Forum!
Diese Probleme löst man mit
BACKTRACKING. :idea: :les: :think: ;)
cu
Narses
greendesire - Fr 20.03.09 20:45
ok danke ich werds mal versuchen :)
EDIT: hab grad mal gegoogelt und auch im forum gesucht.
kann mir vllt jemand einen gutebn link geben, der die backtracking-methode allgemein erläutert?
lg
der organist - Sa 21.03.09 12:24
greendesire hat folgendes geschrieben : |
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20:
| var mengeS,mengeW: array[0..8] of set of byte; . . . with Stringgrid1 do Begin
for i:=0 to 8 do Begin for j:=0 to 8 do Begin Repeat cells[i,j]:=IntToStr(random(9)+1); zahl:=StrToInt(cells[i,j]); Until not ((zahl in menges[i]) or (zahl in mengew[j])); menges[i]:=menges[i]+[zahl]; mengew[j]:=mengew[j]+[zahl]; end; end; end; | |
soweit ich weiss, werden in Sudoku nur die Zahlen von 1 bis 9 verwendet. Deine Zufallszahl geht aber von 1 - 10. Oder versehe ich mich da?
Narses - So 22.03.09 14:13
Moin!
Das ist schon ganz OK so,
Random(9) liefert
0..8, das Ganze um 1 verschoben:
1..9. ;)
cu
Narses
Ruffstaarr - Mi 01.04.09 09:04
Hallo
also ich verstehe das Problem der ganzen Sache nicht so recht.
habe vorher Turbo Pascal Programmiert, und jetzt mit Delphi Angefangen.
gefällt mir ganz gut und die Umstellung ist auch recht "heimisch"...
werde die Datei mal anhängen...
also um auf dein Problem zurückzukommen:
du musst doch Sowieso soetwas wie eine Kandidatenliste haben...
dann könntest du doch mit:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9:
| var Speicher: set of string; for i:1 to 9 do begin if IntToStr(i) in Kandidat[x,y] then begin include(Speicher, i) end randomize...choose aus Speicher |
oder geht das in Delphi nicht?
bin auch gerade Dabei, dieses Sodoku in Delphi umzuwandeln,
habe aber noch Probleme Die Labels als Array zu behandeln....
ansonsten muss ich wahnsinnig viel Quelltext tippen.
wäre da für Hilfe Dankbar
Moderiert von
Narses: Code- durch Delphi-Tags ersetzt
---
Moderiert von
Narses: Beiträge zusammengefasst---
uups
jetzt hatte ich dch glatt mei Sodoku Programm Vergessen....
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!