Cóż, problem jest w po wszystkim. Zachowam poprzednią odpowiedź, ponieważ działa ona również w przypadku skierowanym (którym jest NPC, jak odpowiedziano na drugie pytanie) i pokazuje, że F P T w odniesieniu do l .P.faP.T.l
W przypadku nieukierunkowanym jest on rozwiązywalny, deterministycznie poprzez minimalny przepływ kosztów (może to nie działać na skalach, o których mowa w pytaniu, ale jest lepszy niż algorytm wykładniczy.
Poniższa procedura zadecyduje, czy część zbocza powinna być częścią wykresu wyjściowego. Aby rozwiązać pierwotny problem, po prostu zapętl wszystkie krawędzie.e = ( u , v ) ∈ E.
Aby utworzyć sieć przepływu, wykonaj następujące czynności:
Krok 1: Rozwiń aby mieć wierzchołek x e i zamień e na krawędzie ( u , x e ) , ( x e , u ) , ( v , x e ) , ( x e , v ) (są one skierowane jako część sieci przepływowej), ustaw ich koszt na 0.mixmimi( u , xmi) ,( xmi, u ) , ( v , xmi) , ( xmi, v )
Krok 2: zamień każdy wierzchołek , z wyjątkiem x e, na dwa wierzchołki t - i t + , i dodaj krawędź ( t - , t + ) . Ustaw koszt tych krawędzi na 1.txmit-t+( t-, t+)
Krok 3: Zastąp każdą krawędź krawędziami ( a + , b - ) , ( b + , a - ) . Ustaw koszt tych krawędzi na 0.{ a , b } ∈ E( a+, b-) , ( ur+, a-)
Krok 4: Dodaj nowy wierzchołek i dodaj krawędzie ( s , y e ) , ( t , y e ) z kosztem 0.ymi( s , ymi) , ( t , ymi)
Krok 5: ustaw wszystkie pojemności na 1.
Teraz uruchom algorytm przepływu kosztu minimalnego, szukając przepływu o wartości 2 od do y e .xmiymi
Analiza:
- xmiymix e ⇝ t → y exmi⇝ s → Ymixmi⇝ t → ymi
- Ścieżki są rozłączne, ponieważ dla każdego wierzchołka jest tylko 1 pojemność w łuku .( t - , t + )t( t-, t+)
- Zwrócone ścieżki to dwie ścieżki, których suma odległości jest minimalna, a to także koszt znalezionego przepływu. To pozwala nam dodać do wykresu wyjściowego lub usunąć w inny sposób.mi