非巡回有向グラフがあります。エッジ (v1,v2) がグラフ内にある場合、レベル (v1) > レベル (v2) になることを保証する方法で、各頂点にレベルを割り当てたいと思います。(v1,v2) と (v3,v2) がグラフにあるときは常に level(v1) = level(v3) である場合も同様です。また、可能なレベルは離散的です(自然数であると見なすこともできます)。理想的なケースは、(v1,v2) がグラフ内にあり、v1 から v2 へのパスが他にない場合は常に level(v1) = level(v2) + 1 ですが、他の制約ではそれが不可能な場合があります -たとえば、エッジ (a,b) (b,d) (d,e) (a,c) (c,e) を持つ 5 つの頂点上のグラフを考えます。
これを解決するための適切なアルゴリズムを知っている人はいますか? 私のグラフはかなり小さい (|V| <= 25 程度) ので、非常に高速なものは必要ありません。シンプルさがより重要です。
これまでの私の考えでは、最小の要素を見つけてレベル 0 を割り当て、すべての親を見つけてレベル 1 を割り当て、適切な頂点に +0.5 を追加して矛盾を解決するだけですが、これはかなりひどいようです。
また、すべての「暗黙の」エッジを削除する (つまり、グラフに (v1,v2) と (v2,v3) の両方が含まれる場合は (v1,v3) を削除する) と役立つかもしれないと感じています。