2017-12-07 11 views
1

私はCUDD C++インターフェイスを使用しています。CUDD:BDDチャイルドにアクセスする

私はこのライブラリに関する多くの情報が見つかりません。

BDDの2人の子供を取得するにはどうすればよいですか?例えば

Cudd mgr; 
BDD x = mgr.bddVar(); 
BDD y = mgr.bddVar(); 
BDD f = x * y; 

は今、Fで、私はその子、その後、他の子供を取得したいです。 ドキュメントではDdNodeにこの子がありますが、私はそれらにアクセスする方法がわかりません。

ありがとうございます。

答えて

0

次のようにあなたはCudd BDDノードのその後と他の子にアクセスすることができます

DdNode *t = Cudd_T(f.getNode()); 
DdNode *e = Cudd_E(f.getNode()); 

これは、プレーンCインタフェースを使用するときに二分決定グラフを参照するために使用されるデータ構造であるDdNodeポインタを与えます。

BDD tb = BDD(mgr,t); 

上記はfが補完されたノードでない場合にのみ作用することに注意してください。それ以外の場合は、Cudd_Regular関数を使用してgetNode関数を呼び出した結果を実行する必要があります。これは、BDDの意味を逆転させることに注意してください。

BDDは、CuDDが反転ノードを使用していないかのように扱うこともできます。このケースでは、次のように後継者を取得します。

BDD t; 
BDD e; 
if (Cudd_IsComplement(f.getNode())) { 
    t = !BDD(manager,Cudd_Regular(Cudd_T(f.getNode()))); 
    e = !BDD(manager,Cudd_Regular(Cudd_E(f.getNode()))); 
} else { 
    t = BDD(manager,Cudd_T(f.getNode())); 
    e = BDD(manager,Cudd_E(f.getNode())); 
} 
+0

ありがとうございます。 それは私の質問を解決しました:) –

+0

@MarcBenedí質問に答えた場合は、この回答を受け入れることを検討してください。 –

関連する問題