Mik3e
Erfahrenes Mitglied
So, hab das Teil jetzt noch umgebaut und mit einer Grafischen Ausgbae versehen... Funktioniert ganz gut, nur müsste man die Priorisierung noch optimieren:
http://www.powerticket.net/TESTbestplatzcalc3.php
Quellcode komplett:
http://www.powerticket.net/TESTbestplatzcalc3.php
Quellcode komplett:
PHP:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<title>Unbenanntes Dokument</title>
</head>
<body>
<?php
// globale Variablen
// in $places stehen die freien Plätze
// Grundplan anlegen
$places = array();
for ($i=0;$i<=10;$i++) {
for($g=0;$g<=10;$g++) {
if (rand(0,1)==0) {
$places[$i][$g] = true;
} else {
$places[$i][$g] = false;
}
}
}
/*echo 'REIHEN:'.count($places);
echo 'PLÄTZE:'.count($places[0]);*/
function searchPlaces($amt) {
checkPlaces($amt);
}
// Gefundene Plätze löschen
function clearResp() {
global $places, $response, $famt;
$response = array();
for ($y=0; $y<count($places); $y++) {
$response[$y] = array();
for ($x=0; $x<count($places[$y]); $x++) {
$response[$y][$x] = false;
}
}
$famt = 0;
}
// Gefundene Plätze zählen
function countResp() {
global $places, $response;
$c = 0;
for ($y=0; $y<count($places); $y++) {
for ($x=0; $x<count($places[$y]); $x++) {
if ($response[$y][$x] == true) {
$c++;
}
}
}
return $c;
}
// Plätze suchen:
function checkPlaces($amt) {
global $places, $response, $famt;
/********************************
* $i = 3 Varianten:
* - horizontal verbunden
* - vertikal verbunden
* - diagonal verbunden
/********************************/
for ($i=1; $i<=3; $i++) {
for ($y=0; $y<count($places); $y++) {
for ($x=0; $x<count($places[0]); $x++) {
/*echo 'REIHE:'.$y.'<br>';
echo 'PLATZ:'.$x.'<br>';*/
clearResp();
flood($i, $x, $y, $amt);
if (countResp() >= $amt) {
return true;
}
}
}
}
}
// Weitersuchen
function flood($fmode, $x, $y, $amt) {
global $places, $response, $famt;
if ($famt >= $amt) {
return true;
}
if ($places[$y][$x] == true && $response[$y][$x] != true) {
$response[$y][$x] = true;
$famt ++;
switch($fmode) {
case 1:
flood($fmode, ($x-1), $y, $amt);
flood($fmode, ($x+1), $y, $amt);
break;
case 2:
flood($fmode, ($x-1), $y, $amt);
flood($fmode, ($x+1), $y, $amt);
flood($fmode, $x, ($y-1), $amt);
flood($fmode, $x, ($y+1), $amt);
break;
case 3:
flood($fmode, ($x-1), $y, $amt);
flood($fmode, ($x+1), $y, $amt);
flood($fmode, $x, ($y-1), $amt);
flood($fmode, $x, ($y+1), $amt);
flood($fmode, ($x-1), ($y-1), $amt);
flood($fmode, ($x+1), ($y-1), $amt);
flood($fmode, ($x-1), ($y+1), $amt);
flood($fmode, ($x+1), ($y+1), $amt);
break;
}
}
return;
}
// PLATZSUCHE STARTEN FÜR 4 PLÄTZE
// In $response werden die gefundenen Plätze geschrieben
$response = Array();
$famt = 0;
searchPlaces(20);
?>
<a href="javascript:window.location.reload();"><strong>Saalplan neu generieren</strong><br>
<br>
</a><?PHP
echo '<table width="100%" border="1" cellspacing="2" cellpadding="0">';
for ($y=0; $y<count($response); $y++) {
echo '<tr>';
for ($x=0; $x<count($response[0]); $x++) {
if ($places[$y][$x]) {
$bgcolor='#006600';
} else {
$bgcolor='#FF0000';
}
if ($response[$y][$x]==1) {
echo '<td bgcolor="'.$bgcolor.'"><FONT COLOR="#FFFFFF"><STRONG>X</STRONG></FONT></td>';
} else {
echo '<td bgcolor="'.$bgcolor.'"> </td>';
}
}
echo '</tr>';
}
echo '</table>';
?>
</body>
</html>