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.
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;
}
Kommentar