548 if ( a == 0 )
return 0;
549 if ( a == 1 )
return Abc_ZddIthVar(
Var);
552 A = Abc_ZddNode(
p, a );
553 if (
p->pV2TI[A->
Var] >
p->pV2TI[
Var] )
554 r = Abc_ZddUniqueCreate(
p,
Var, a, 0 );
555 else if ( (
int)A->
Var ==
Var )
561 int Ai =
p->pV2TI[A->
Var];
562 int Aj =
p->pV2TJ[A->
Var];
563 int Bi =
p->pV2TI[
Var];
564 int Bj =
p->pV2TJ[
Var];
565 assert( Ai < Aj && Bi < Bj && Ai <= Bi );
568 VarTop = Abc_ZddVarIJ(
p, Ai, Bj);
571 VarTop = Abc_ZddVarIJ(
p, Ai, Bi);
573 VarPerm = Abc_ZddVarIJ(
p, Abc_MinInt(Aj, Bj), Abc_MaxInt(Aj, Bj)),
578 assert(
p->pV2TI[VarPerm] >
p->pV2TI[VarTop] );
581 assert( Abc_ZddObjVar(
p, r1) > VarTop );
582 if ( Abc_ZddObjVar(
p, r0) > VarTop )
583 r = Abc_ZddUniqueCreate(
p, VarTop, r1, r0 );
585 r1 = Abc_ZddUniqueCreate(
p, VarTop, r1, 0 ),
717 int pSets[3][5] = { {5, 0, 2, 10, 7}, {3, 11, 10, 7, 2}, {0, 2, 5, 10, 7} };
718 int i, Set, Union = 0;
719 for ( i = 0; i < nSets; i++ )
725 printf(
"Resulting set:\n" );
793 int pPerms[3][5] = { {1, 0, 2, 4, 3}, {1, 2, 4, 0, 3}, {0, 3, 2, 1, 4} };
794 int pComb[5], nTrans;
795 int i, k, Set, Union = 0, iPivot;
796 for ( i = 0; i < nPerms; i++ )
798 for ( i = 0; i < nPerms; i++ )
800 printf(
"Perm %d:\n", i );
804 for ( k = 0; k < nTrans; k++ )
805 pComb[k] = Abc_ZddVarIJ(
p, pComb[k] >> 16, pComb[k] & 0xFFFF );
811 printf(
"\nResulting set of permutations:\n" );
815 iPivot = Abc_ZddVarIJ(
p, 3, 4 );
818 printf(
"\nResulting set of permutations:\n" );
847 int pXYZ[3][9][2] = {
848 { {3, 5}, {3,17}, {3,15}, {1, 6}, {1,16}, {1,14}, {2, 4}, {2,18}, {2,13} },
849 { {2,14}, {2,24}, {2,12}, {3,13}, {3,23}, {3,10}, {1,15}, {1,22}, {1,11} },
850 { {1,10}, {1, 7}, {1, 4}, {3,12}, {3, 9}, {3, 6}, {2,11}, {2, 8}, {2, 5} } };
857 int i, k, pComb[9], pPerm[24], nSize;
858 int ZddTurn1, ZddTurn2, ZddTurn3, ZddTurns, ZddAll;
860 printf(
"Enumerating states of 2x2x2 cube.\n" );
864 printf(
"Iter %2d -> %8d Nodes = %7d Used = %10d ", 0, 1, 0, 2 );
865 Abc_PrintTime( 1,
"Time", Abc_Clock() - clk );
868 for ( i = 0; i < 3; i++ )
870 for ( k = 0; k < 24; k++ )
872 for ( k = 0; k < 9; k++ )
873 ABC_SWAP(
int, pPerm[pXYZ[i][k][0]-1], pPerm[pXYZ[i][k][1]-1] );
876 for ( k = 0; k < 9; k++ )
877 pComb[k] = Abc_ZddVarIJ(
p, pComb[k] >> 16, pComb[k] & 0xffff );
894 Abc_PrintTime( 1,
"Time", Abc_Clock() - clk );
897 for ( i = 2; i <= 100; i++ )
899 int ZddAllPrev = ZddAll;
902 Abc_PrintTime( 1,
"Time", Abc_Clock() - clk );
903 if ( ZddAllPrev == ZddAll )