/** * @return Chain */ public function makeChain($x, $y, $chain = null) { if (isset(self::$see[$y][$x])) { return $chain; } if ($this->allowPoint($x, $y)) { if (is_null($chain)) { $chain = new Chain(); } $chain->addPoint($x, $y); self::$see[$y][$x] = 1; if (sizeof($chain->op) > 250) { return $chain; } $this->makeChain($x + 1, $y, $chain); $this->makeChain($x, $y + 1, $chain); $this->makeChain($x - 1, $y, $chain); $this->makeChain($x, $y - 1, $chain); $this->makeChain($x + 1, $y + 1, $chain); $this->makeChain($x + 1, $y - 1, $chain); $this->makeChain($x - 1, $y - 1, $chain); $this->makeChain($x - 1, $y + 1, $chain); } return $chain; }
function makeChain($points, $x, $y, $chain = null) { static $see = []; if (isset($see[$x][$y])) { return $chain; } $see[$x][$y] = 1; if (isset($points[$y][$x]) && $points[$y][$x] == 1) { if (is_null($chain)) { $chain = new Chain(); } $chain->addPoint($x, $y); makeChain($points, $x + 1, $y, $chain); makeChain($points, $x + 1, $y + 1, $chain); makeChain($points, $x, $y + 1, $chain); makeChain($points, $x - 1, $y, $chain); makeChain($points, $x - 1, $y - 1, $chain); makeChain($points, $x, $y - 1, $chain); makeChain($points, $x + 1, $y - 1, $chain); makeChain($points, $x - 1, $y + 1, $chain); } return $chain; }