Hallo,
ich habe nachfolgenden code der ein Sudoku rekursiv lösen soll, leider funktioniert es nicht, als Ergebnis erhalte ich immer ein leeres Array in dem [1][1] mit 0 befüllt ist.
Als Vorlage/Vorgabe dient dieses Struktogramm (wobei hier auch ein Fehler drin sein könnte):
Wäre echt spitze wenn da mal jemand kurz drüber schaun könnte und mir evtl. einen Tipp geben kann.
PHP-Code:
$MemArr = array();
function MoeglichBlock($Spalte, $Zeile, $Ziffer)
{
global $MemArr;
$ZeileStart = $Zeile - (($Zeile-1)%3);
$ZeileEnde = $ZeileStart+2;
$SpalteStart = $Spalte - (($Spalte-1)%3);
$SpalteEnde = $SpalteStart+2;
for($Z=$ZeileStart;$Z<=$ZeileEnde;$Z++) {
for($S=$SpalteStart;$S<=$SpalteEnde;$S++) {
if($MemArr[$Z][$S] == $Ziffer) {
return false;
}
}
}
return true;
}
function MoeglichSpalte($Spalte, $Ziffer)
{
global $MemArr;
for($Zeile=1;$Zeile<=9;$Zeile++) {
if($MemArr[$Zeile][$Spalte] == $Ziffer) {
return false;
}
}
return true;
}
function MoeglichZeile($Zeile, $Ziffer)
{
global $MemArr;
for($Spalte=1;$Spalte<=9;$Spalte++) {
if($MemArr[$Zeile][$Spalte] == $Ziffer) {
return false;
}
}
return true;
}
function Moeglich($Zeile, $Spalte, $Ziffer)
{
global $MemArr;
if (MoeglichZeile($Zeile, $Ziffer) &&
MoeglichSpalte($Spalte, $Ziffer) &&
MoeglichBlock($Spalte, $Zeile, $Ziffer)) {
return true;
}
else {
return false;
}
}
function SudRek()
{
global $MemArr;
for($Zeile=1;$Zeile<=9;$Zeile++) {
for($Spalte=1;$Spalte<=9;$Spalte++) {
if($MemArr[$Zeile][$Spalte] == 0) {
for($Ziffer=1;$Ziffer<=9;$Ziffer++) {
if(Moeglich($Zeile, $Spalte, $Ziffer)) {
$MemArr[$Zeile][$Spalte] = $Ziffer;
}
$Erg = SudRek();
if($Erg == true) {
return true;
}
else {
$MemArr[$Zeile][$Spalte] = 0;
}
}
}
return false;
}
}
return true;
}