static int trythisone(grouprec *group, int ne, int n) { int i,k; boolean accept; first = TRUE; ADDBIG(ngen,1); nix = ne; newgroupsize = 1; if (!group || groupsize == 1) accept = TRUE; else if (lastrejok && !ismax(lastreject,n)) accept = FALSE; else if (lastrejok && groupsize == 2) accept = TRUE; else { newgroupsize = 1; if (allgroup2(group,testmax) == 0) accept = TRUE; else accept = FALSE; } if (accept) { #ifdef GROUPTEST if (groupsize % newgroupsize != 0) gt_abort("group size error\n"); totallab += groupsize/newgroupsize; #endif ADDBIG(nout,1); if (outfile) { fprintf(outfile,"%d %ld",n,ne); if (Gswitch) fprintf(outfile," %lu",newgroupsize); for (i = -1; (i = nextelement(x,me,i)) >= 0; ) { k = i >> 1; if (i & 1) fprintf(outfile," %d %d",v1[k],v0[k]); else fprintf(outfile," %d %d",v0[k],v1[k]); } fprintf(outfile,"\n"); } return MAXNE+1; } else return rejectlevel;
void static testmax(int *p, int n, int *abort) /* Called by allgroup2. */ { int i; if (first) { /* only the identity */ first = FALSE; return; } if (!ismax(p,n)) { *abort = 1; for (i = 0; i < n; ++i) lastreject[i] = p[i]; lastrejok = TRUE; } }
static int trythisone(grouprec *group, int ne, int n) { int i,k; boolean accept; #ifdef PROCESS graph g[WORDSIZE]; #endif first = TRUE; ++gd_ngen; nix = ne; newgroupsize = 1; ntgroup = FALSE; if (!group || groupsize == 1) accept = TRUE; else if (lastrejok && !ismax(lastreject,n)) accept = FALSE; else if (lastrejok && groupsize == 2) accept = TRUE; else { newgroupsize = 1; ntgroup = FALSE; if (allgroup2(group,testmax) == 0) accept = TRUE; else accept = FALSE; } if (accept) { #ifdef GROUPTEST if (groupsize % newgroupsize != 0) gt_abort("group size error\n"); totallab += groupsize/newgroupsize; #endif if (Vswitch && !ntisol && !ntgroup) return MAXNE+1; ++dg_nout; #ifdef PROCESS EMPTYSET(g,n); for (i = -1; (i = nextelement(x,me,i)) >= 0; ) { k = i >> 1; if (i & 1) g[v1[k]] |= bit[v0[k]]; else g[v0[k]] |= bit[v1[k]]; } PROCESS(outfile,g,n); #endif if (outfile) { fprintf(outfile,"%d %d",n,ne); if (Gswitch) fprintf(outfile," %lu",newgroupsize); for (i = -1; (i = nextelement(x,me,i)) >= 0; ) { k = i >> 1; if (i & 1) fprintf(outfile," %d %d",v1[k],v0[k]); else fprintf(outfile," %d %d",v0[k],v1[k]); } fprintf(outfile,"\n"); } return MAXNE+1; } else return rejectlevel;
static void trythisone(grouprec *group, boolean lswitch, int *deg, int maxdeg, int ne, int n) /* Try one solution, accept if minimal. */ { int i,ne2; boolean accept; nix = ne; newgroupsize = 1; if (!group || groupsize == 1) accept = TRUE; else if (lastrejok && !ismax(lastreject,n)) accept = FALSE; else if (lastrejok && groupsize == 2) accept = TRUE; else { newgroupsize = 1; first = TRUE; if (allgroup2(group,testmax) == 0) accept = TRUE; else accept = FALSE; } if (accept) { #ifdef GROUPTEST if (groupsize % newgroupsize != 0) gt_abort("group size error\n"); totallab += groupsize/newgroupsize; #endif ++mg_nout; if (outfile) { ne2 = ne; if (lswitch) for (i = 0; i < n; ++i) if (deg[i] < maxdeg) { v0[ne2] = v1[ne2] = i; ix[ne2] = (maxdeg-deg[i])/2; ++ne2; } #ifdef OUTPROC OUTPROC(outfile,n,ne2,newgroupsize,v0,v1,ix); #else if (Aswitch || Bswitch) printam(outfile,n,ne2,ix); else { fprintf(outfile,"%d %d",n,ne2); if (Gswitch) fprintf(outfile," %lu",newgroupsize); for (i = 0; i < ne2; ++i) fprintf(outfile," %d %d %d",v0[i],v1[i],ix[i]); fprintf(outfile,"\n"); } #endif } return; } else return; }