一連の数値{0、1、2、4、5 ...}と各要素の相対位置に関する一連の条件が与えられた場合に、有効な順列が存在するかどうかをチェックするアルゴリズムを探しています。条件は常にタイプ「元の配列の位置iの要素は位置jまたはzの要素の隣(隣接)でなければなりません」です。
順列の最後と最初の要素は隣接していると見なされます。
簡単な例を次に示します。
数値を{0、1、2、3}
とし、一連の条件を設定します。a0はa1の隣にある必要があり、a0はa2の隣にある必要があり、a3はa1の隣にある必要があります
。この例の有効な解決策は{0、 1,3,2}。
このソリューションの回転/対称性も有効なソリューションであることに注意してください。そのような解決策が存在することを証明する必要があります。
同じセットを使用する別の例:
a0はa1の隣にある必要があり、a0はa3の隣にある必要があり、a0はa2の隣にある必要があります。
番号は2つの番号にしか隣接できないため、この例の有効な解決策はありません。
私が今思いつくことができる唯一のアイデアは、ある種のバックトラックを使用することです。
解決策が存在する場合、これは静かに速く収束するはずです。解決策が存在しない場合、考えられるすべての順列をチェックすることを回避する方法を想像することはできません。すでに述べたように、回転や対称性は特定の順列の結果に影響を与えないため、可能性の数を減らすことができるはずです。