gudn tach Mike!
mein "Backtracking" läuft derzeit so, dass einfach mal von vorne angefangen wird, wenn 500 Versuche in einer Zeile zu nix führten. lol
hmm, das ist wahrlich nicht besonders effizient. ;-)
grober vorschlag in pseudo-code:
function belege_zelle(zelle, wert){
// belege eine zelle mit einem wert.
// also: belege spalte, zeile, subquadrat
}
function wert_zulaessig_in_zelle(zelle, wert){
// pruefe, ob eine uebergebene zelle mit dem uebergebenen wert zulaessig ist.
// also: pruefe zeile, pruefe spalte, pruefe subquadrat
return ("zulaessig")?1:0;
}
function zelle_belegbar(zelle){
// pruefe, ob eine uebergebene zelle ueberhaupt mit einem wert zulaessig belegbar ist.
// also sowas wie: nicht belegbar, falls wert_zulaessig_in_zelle(zelle, 1..9)=0
return ("zelle belegbar")?1:0;
}
function wandere_durchs_feld(aktuelle_zelle){
// das soll die start-funktion (bzw. hauptfunktion) werden
if(aktuelle_zelle=82. zelle){
// abbruch, geschafft, yippieh!
}else{
if(zelle_belegbar(aktuelle_zelle)){
// generiere zufallswert $a
while(!wert_zulaessig_in_zelle(aktuelle_zelle, $a)){
// generiere zufallswert $a
}
belege_zelle(aktuelle_zelle, $a);
// und jetzt folgt der rekursions-, also der backtrackingschritt
wandere_durchs_feld(naechste_zelle);
}
}
}
function wandere_durchs_feld(erste zelle);
hab's jetzt bloss so hingeschmiert, aber so aehnlich sollte das afais funzen.
prost
seth