Z
zirzofer
Guest
mittels php-funktion wird ein Weg durch das Labyrinth von Beginn B nach Ende E gefunden. der richtige weg wird in einem array gespeichert.
die funktion läuft, braucht jedoch selbst bei einem so leichten fall wie hier so viel speicher, dass sie trotz 1024MB limit out of memory läuft. wie kann ich das verhindern und vor allem die funktion fit fuer groessere labyrinthe machen?
labyrinth.txt:
die funktion läuft, braucht jedoch selbst bei einem so leichten fall wie hier so viel speicher, dass sie trotz 1024MB limit out of memory läuft. wie kann ich das verhindern und vor allem die funktion fit fuer groessere labyrinthe machen?
PHP:
<?php
function pfad_suchen($x_koord, $y_koord, $bewegungsrichtung = null){
global $raum, $x_koord_max, $y_koord_max, $weg;
if(!isset($raum[$x_koord][$y_koord])){ //Koordinaten außerhalb
return false;
}
if($raum[$x_koord][$y_koord] === 'E'){ //Ausgang
return true;
}
if(($raum[$x_koord][$y_koord] === '_')){ //Mauer
return false;
}
if($bewegungsrichtung !== null){
$weg[] = $bewegungsrichtung; //letzte Bewegung dem Weg zum Ausgang hinzufügen
}
if(pfad_suchen($x_koord, $y_koord+1, 'rechts')){
return true;
}
if(pfad_suchen($x_koord+1, $y_koord, 'runter')){
return true;
}
if(pfad_suchen($x_koord-1, $y_koord, 'hoch')){
return true;
}
if(pfad_suchen($x_koord, $y_koord-1, 'links')){
return true;
}
if(count($weg) >= 1){
array_pop($weg);
}
return false;
}
$f = fopen('labyrinth.txt', 'r' );
$x_koord_max = 8;
$y_koord_max = 9;
$raum = [];
$start = [false, false];
for($i = 0; $i<=$x_koord_max; $i++){
$zeile = trim(fgets($f));
if($start[1] === false){
$start = [$i, strpos($zeile, 'B')];
}
array_push($raum, $zeile);
}
$weg = [];
pfad_suchen($start[0], $start[1]);
echo "<pre>";
var_dump($weg);
echo "</pre>";
die();
?>
labyrinth.txt:
Code:
_________
_________
__+____B_
_______+_
___+___+_
__++___+_
___+++++_
___E_____
Zuletzt bearbeitet: