48 int i, k, Entry = 0, Entry2, Count = 0, Below;
49 int Prev = Vec_IntEntry( vSet, 0 );
52 assert( Degree*Prev >= Entry );
53 if ( Degree*Prev == Entry )
61 Count += Below * (Degree*Prev - 1);
64 Count += nVars * Degree*Prev;
65 return Vec_IntSum(vSet) < nVars - 1 ? 0 : Count;
75 int i, k, e, Start, Stop;
76 printf(
"Counting topologies for %d inputs and %d degree-%d nodes.\n", nInputs, nNodes, Degree );
77 Start = Hsh_VecManAdd(
p, vSet );
78 for ( i = 1; i <= nNodes; i++ )
80 Stop = Hsh_VecSize(
p );
81 for ( e = Start; e < Stop; e++ )
85 Vec_IntAppend( vSet, vTemp );
86 for ( k = 0; k < Vec_IntSize(vSet); k++ )
89 if ( k ? (Vec_IntEntry(vSet, k) == Degree*Vec_IntEntry(vSet, k-1)) : (Vec_IntEntry(vSet, 0) > 0) )
91 Vec_IntAddToEntry( vSet, k, 1 );
92 Hsh_VecManAdd(
p, vSet );
93 Vec_IntAddToEntry( vSet, k, -1 );
95 Vec_IntPush( vSet, 1 );
96 Hsh_VecManAdd(
p, vSet );
98 printf(
"Nodes = %2d : This = %8d All = %8d\n", i, Hsh_VecSize(
p) - Stop, Hsh_VecSize(
p) );
101 for ( e = Stop; e < Hsh_VecSize(
p); e++ )
105 Vec_IntPrint( vTemp );