202 int * offset =
ABC_ALLOC(
int, nGroups );
206 for ( i = 0; i < nGroups; ++i )
219 minWord(x, pAux, minimal, nVars);
227 nn = ( nGroups << 1 ) + 1;
234 for ( i = 1; i <= nGroups; ++i ) { m[i] = pis[pGroups[i - 1]]->
totalFlips + 1; }
235 for ( i = 1; i <= nGroups; ++i ) { m[nGroups + i] = pis[pGroups[i - 1]]->
totalSwaps + 1; }
236 for ( i = 0; i < nn; ++i ) { a[i] = c[i] = 0; }
241 for ( i = 1; i <= nGroups; ++i )
243 if ( !c[i] ) {
continue; }
244 if ( !fFlipInput && pGroups[i - 1] == 1 ) {
continue; }
246 pi = pis[pGroups[i - 1]];
253 minWord3(x, pAux, minimal, nVars);
257 minWord1(x, minimal, nVars);
262 for ( i = 1; i <= nGroups; ++i )
264 if ( !c[nGroups + i] ) {
continue; }
265 if ( pGroups[i - 1] == 1 ) {
continue; }
267 pi = pis[pGroups[i - 1]];
280 minWord3(x, pAux, minimal, nVars);
284 minWord1(x, minimal, nVars);
289 memset(c, 0,
sizeof(
int) * nn);
291 while ( a[j] == m[j] - 1 ) { c[j] = 1; a[j--] = 0; }
294 if ( j == 0 ) {
break; }
void simpleMinimalGroups(word *x, word *pAux, word *minimal, int *pGroups, int nGroups, permInfo **pis, int nVars, int fFlipOutput, int fFlipInput)