enqueue([0, 0]); // [現在の状態, 使用したクーポン数] $visited[0] = true; while (!$queue->isEmpty()) { list($state, $count) = $queue->dequeue(); if ($state === $goal) { echo $count . PHP_EOL; exit; } foreach ($coupons as $coupon) { $next = $state | $coupon; if (!$visited[$next]) { $visited[$next] = true; $queue->enqueue([$next, $count + 1]); } } } echo -1 . PHP_EOL;