状態の重複を防ぐためには、以下の方法を用いることが効果的です。 訪問済みの状態を記録: 訪問済みの状態を集合(set)や辞書(dict)で管理し、新しい状態を探索する前にその状態がすでに訪問済みかどうかを確認します。 状態の正規化: 状態を一意に識別できる形式で表現し、同じ状態が異なる表現で記録されないようにします。 例えば、バケツの水量をタプルで表現する際、常に小さい方のバケツを先に記録することで、同じ状態を一意に表現できます。 無駄な操作の排除: 明らかに無駄な操作(例えば、空のバケツを満たすなど)を排除することで、状態の重複を減らすことができます。