2017-12-07 6 views
1

CUDD C++ 인터페이스로 작업하고 있습니다.CUDD : BDD 하위에 액세스

이 라이브러리에 대한 정보는 많지 않습니다.

BDD의 두 자녀를 어떻게 구할 수 있습니까? 예를 들어

:

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 인터페이스를 사용하는 경우 BDD 계열을 참조하는 데 사용되는 데이터 구조입니다 DdNode 포인터를 제공합니다.

BDD tb = BDD(mgr,t); 

위의 내용은 f가 보수 노드가 아닌 경우에만 작동한다는 점에 유의하십시오. 그렇지 않으면 Cudd_Regular 함수를 통해 "getNode"함수를 호출 한 결과를 실행해야합니다. 이것은 BDD의 의미를 바꾸어줍니다.

CuDD가 거꾸로 된 노드를 사용하지 않는 것처럼 BDD를 처리 할 수도 있습니다. 이 경우 다음과 같이 후계자를 얻게됩니다.

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í 질문에 답변이 대답을 수락 고려하십시오. –