タワー ソリティア、トライピークス、またはフェアウェイ ソリティアのようなカード ゲームを考えてみましょう。テーブルは、すぐに利用できる数枚のカードで構成されており、それぞれがその下にある他のカードを覆っている可能性があります (それらがプレイされるのをブロックしています)。あなたは「基礎」カードを 1 枚持っており、それがあなたの基礎カードのちょうど 1 ランク上または下にある場合、そのカードをテーブルから取り除くことができ、その時点でそれがあなたの新しい基礎カードになります。テーブルからカードをプレイできない場合に引き換えるカードの数は限られているため、通常は可能な限り長い順番でカードをプレイしたいと考えます。
まず、解決策を見つけやすくするために、取締役会をどのように代表しますか? 次に、再生可能な最長のシーケンスを見つけるためにどのアルゴリズムを使用しますか?
例:
-4a- -5- -3- -2- -4b-
一番下のカードは、一番上のカードが取り除かれるのを防ぎます。3 と 2 の両方がなくなるまで、4a を取り除くことはできません。開始カードがエースであると仮定すると、ここでの最適なプレイは 2、3、4b、5、4a になります。(代わりに 2、3、4a をプレイすることもできますが、それはあまり良くありません。)
これはある種の有向グラフとして表現されるべきだと思います。3 と 2 から 4a へ、および 2 と 4b から 5 へのエッジがありますが、3 と 2 の間、および 4a と 5 の間のエッジもあるでしょうか。もしそうなら、それらがいずれかの順序 (3 の次に 2、または 2 の次に 3) で再生できるという事実は、効率的な「最長パス」アルゴリズムを使用することを妨げるグラフ内のサイクルを形成しますか? (グラフにサイクルが含まれている場合、グラフ内の最長パスを見つけることはNP完全であると私は信じています。)