seth: Sudoku

Beitrag lesen

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