PHPでハノイの塔

ITproで丁度ハノイの塔を使った再起の話題が出ていたので、あまりよく理解していなかった私がPHPで例文のハノイの塔を移植&ちょっと理解しやすい形でプログラミングしてみました。

サンプル
[php]






view();
$hanoi->exec($x, ‘a’, ‘b’, ‘c’);

class hanoi
{
public $a = array();
public $b = array();
public $c = array();

public function __construct($a)
{
for ($i = 1; $i <= $a; $i++) { $this->a[] = $i;
}
}

public function exec($maisu, $a, $b, $c)
{
if ($maisu > 0) {
$this->exec($maisu – 1, $a, $c, $b);

$this->move($a, $c); // $a から $c へ。
$this->view();

$this->exec($maisu -1, $b, $a, $c);
}
}

public function move($from, $to)
{
$move = array_shift($this->{$from});
array_unshift($this->{$to},$move);
echo (“$from から $to に。
“);
}

public function view()
{
echo (‘+————————+
‘);
echo (‘A:’);$this->_viewWhole($this->a);
echo (‘B:’);$this->_viewWhole($this->b);
echo (‘C:’);$this->_viewWhole($this->c);
echo (‘+————————+
‘);
}

private function _viewWhole(array $data)
{
for ($i = count($data) – 1; $i >= 0; $i–) {
echo($data[$i]);
}
echo(“
“);
}
}

?>


[/php]

1~9までの数を入力すれば、それを板の枚数として実行します。

プログラムがどういう動きをするのかよくわからない!という方は、数字を1から2,3,4と段々大きくしながら結果を見ていくと理解しやすいのではないでしょうか。