Mam nadzieję, że nospor nie znajdzie dziury w całym ;p
<!DOCTYPE html>
<html>
<body>
<p>Czy miś dojdzie do miodu, jeżeli będzie sie poruszał po samych parzystych polach?</p><br />
<?php
$dane[0
][0
] = rand(1
, 4
); $dane[0
][1
] = rand(1
, 4
); $dane[0
][2
] = rand(1
, 4
); $dane[0
][3
] = rand(1
, 4
);
$dane[1
][0
] = rand(1
, 4
); $dane[1
][1
] = rand(1
, 4
); $dane[1
][2
] = rand(1
, 4
); $dane[1
][3
] = rand(1
, 4
);
$dane[2
][0
] = rand(1
, 4
); $dane[2
][1
] = rand(1
, 4
); $dane[2
][2
] = rand(1
, 4
); $dane[2
][3
] = rand(1
, 4
);
$dane[3
][0
] = rand(1
, 4
); $dane[3
][1
] = rand(1
, 4
); $dane[3
][2
] = rand(1
, 4
); $dane[3
][3
] = rand(1
, 4
);
?>
<table border="1" cellpadding="0" cellspacing="0">
<tr>
<td>-----</td>
<td>-----</td>
<td>Start</td>
<td>-----</td>
</tr>
<tr>
<td>
<?php echo $dane[0
][0
]; ?></td>
<td>
<?php echo $dane[0
][1
]; ?></td>
<td>
<?php echo $dane[0
][2
]; ?></td>
<td>
<?php echo $dane[0
][3
]; ?></td>
</tr>
<tr>
<td>
<?php echo $dane[1
][0
]; ?></td>
<td>
<?php echo $dane[1
][1
]; ?></td>
<td>
<?php echo $dane[1
][2
]; ?></td>
<td>
<?php echo $dane[1
][3
]; ?></td>
</tr>
<tr>
<td>
<?php echo $dane[2
][0
]; ?></td>
<td>
<?php echo $dane[2
][1
]; ?></td>
<td>
<?php echo $dane[2
][2
]; ?></td>
<td>
<?php echo $dane[2
][3
]; ?></td>
</tr>
<tr>
<td>
<?php echo $dane[3
][0
]; ?></td>
<td>
<?php echo $dane[3
][1
]; ?></td>
<td>
<?php echo $dane[3
][2
]; ?></td>
<td>
<?php echo $dane[3
][3
]; ?></td>
</tr>
<tr>
<td>-----</td>
<td>Meta</td>
<td>-----</td>
<td>-----</td>
</tr>
</table>
<?php
echo "przed zmianą: <br />"; //echo "<pre>";
//echo "</pre>";
// zmiana liczb parzystych na kropki a nieparzystych na gwiazdki
array_walk_recursive($dane, function(&$value) {
$value = ($value %2 == 0) ? '.' : '*';
});
?>
<table border="1" cellpadding="0" cellspacing="0">
<tr>
<td>-----</td>
<td>-----</td>
<td>Start</td>
<td>-----</td>
</tr>
<tr>
<td>
<?php echo $dane[0
][0
]; ?></td>
<td>
<?php echo $dane[0
][1
]; ?></td>
<td>
<?php echo $dane[0
][2
]; ?></td>
<td>
<?php echo $dane[0
][3
]; ?></td>
</tr>
<tr>
<td>
<?php echo $dane[1
][0
]; ?></td>
<td>
<?php echo $dane[1
][1
]; ?></td>
<td>
<?php echo $dane[1
][2
]; ?></td>
<td>
<?php echo $dane[1
][3
]; ?></td>
</tr>
<tr>
<td>
<?php echo $dane[2
][0
]; ?></td>
<td>
<?php echo $dane[2
][1
]; ?></td>
<td>
<?php echo $dane[2
][2
]; ?></td>
<td>
<?php echo $dane[2
][3
]; ?></td>
</tr>
<tr>
<td>
<?php echo $dane[3
][0
]; ?></td>
<td>
<?php echo $dane[3
][1
]; ?></td>
<td>
<?php echo $dane[3
][2
]; ?></td>
<td>
<?php echo $dane[3
][3
]; ?></td>
</tr>
<tr>
<td>-----</td>
<td>Meta</td>
<td>-----</td>
<td>-----</td>
</tr>
</table>
<?php
echo "Po zmianie: <br />"; //echo "<pre>";
//echo "</pre>";
// start i meta
echo "<p>Brak trasy</p>"; echo "<p>Nie nastąpiło przemieszczenie</p>"; echo "<p>Jest trasa przejścia, jej współrzędne: </p>"; foreach($wynik as $punkt)
echo "($punkt[0], $punkt[1]) "; }
function trasa($dane, $start, $stop) {
// nie można wykonać obliczeń, gdy punkty startowy i końcowy są zajęte
if ($dane[$stop[1]][$stop[0]] <> '.' or $dane[$start[1]][$start[0]] <> '.') return;
$licznik = 1; // licznik określa kolejne odległości od końca
$dane[$stop[1]][$stop[0]] = $licznik;
$punkty[] = $stop;
while(count($punkty) > 0
) { $licznik++;
foreach($punkty as $p) {
$x = $p[0];
$y = $p[1];
if ($x == $start[0] and $y == $start[1]) {
$jest = true;
break;
}
if ($dane[$y][$x - 1] == '.') { $dane[$y][$x - 1
] = $licznik; $n[] = array($x - 1
, $y); } if ($dane[$y][$x + 1] == '.') { $dane[$y][$x + 1
] = $licznik; $n[] = array($x + 1
, $y); } if ($dane[$y + 1
][$x] == '.') { $dane[$y + 1
][$x] = $licznik; $n[] = array($x, $y + 1
); } if ($dane[$y - 1
][$x] == '.') { $dane[$y - 1
][$x] = $licznik; $n[] = array($x, $y - 1
); } }
$punkty = $n;
}
// jeżeli nie udało się od końca dotrzeć do początku, nie ma przejścia
if (!$jest)
return;
while($dane[$start[1]][$start[0]] > 1) {
$x = $start[0];
$y = $start[1];
if ($dane[$y][$x - 1
] > 0 and
$dane[$y][$x - 1
]<$dane[$y][$x]) $start = array($x - 1
, $y); if ($dane[$y][$x + 1
] > 0 and
$dane[$y][$x + 1
]<$dane[$y][$x]) $start = array($x + 1
, $y); if ($dane[$y + 1
][$x] > 0 and
$dane[$y + 1
][$x]<$dane[$y][$x]) $start = array($x, $y + 1
); if ($dane[$y - 1
][$x] > 0 and
$dane[$y - 1
][$x]<$dane[$y][$x]) $start = array($x, $y - 1
); }
$wynik[] = array($stop[0
], $stop[1
]);
return $wynik;
}
?>
</body>
</html>
Kod sprawdza wszystkie cztery kierunki, ale można zakomentować ruch wstecz. Tablica o tak małych wymiarach jest nieco uciążliwa, drogę znajduje raz na kilkanaście razy...