2017-09-29 23 views
0

特定のタイプのノードを削除する必要がありますが、グラフを接続したままにしておきます。グラフ理論:ノードを削除しますが、新しい頂点を作成してグラフを維持する

これは有向非循環グラフです。

例:

enter image description here

私はすべての "B" のノードを削除し、次のように結果のみ "A"、保持するためにアルゴリズムを実行したい:

enter image description here

を私はこの問題を解決できるグラフ理論アルゴリズムがあるかどうか疑問に思っていましたか?

+0

あなたの例を見ると、A1がB0の場合が考えられますか?それを個別に処理しないと、接続されていないグラフが表示されます。 –

+0

@PeterAbolins:公正な質問:結果は、未接続のグラフになることがあります。 A1がB0の場合、出力はA3→A4のみにします。 A2はそれを指す頂点を持たない。私は本当にグラフが接続されることを望んでいないと思う、私はA型の間だけの頂点が欲しい。 –

+0

私のソリューションが援助の対象であった場合は、答えとしてマークしますか?そうでない場合は、私に知らせてください。ありがとう:) –

答えて

1

私はアルゴリズムとグラフ理論で作業して以来、長い年月が経っています。私の答えが少し錆びているようであれば、事前にお詫び申し上げます。ルートノードがタイプBである、私は元のルートノードの親として(タイプ<> Bの)ダミールートを作成することが可能であろう考えている場合には

Create a worklist W. 
Add r, the root node, to W. 
While W is not empty: 
    Remove the first entry from W; call it s. 
    For each of s's children: 
     Add it to W. 
    If s is of type B 
     In the graph, set s's parent to be the parent of s's children. 
     Remove s from the graph. 

。最終的なグラフはまだ接続されていますが、ダミールートを削除する必要があるため、要件が何であるかによって異なります。あなたの例では、A2は孤児になり、破棄されます。しかし、2つ以上の切断されたグラフで終わる可能性もあります:A2 - > A5; A3 - > A4(例)

+0

私はあなたのアルゴリズムを使用して終了しました。私はあなたの親をsの子供の親であると設定した段階で変更を加えました。複数の親を持つことができます。だから私はsの親(s)からsの子へのエッジを作成します。助けてくれてありがとう。 –

関連する問題