Page MenuHomePhorge

NRswitchg.c
No OneTemporary

Authored By
Unknown
Size
4 KB
Referenced Files
None
Subscribers
None

NRswitchg.c

/* NRswitchg.c nauty version 2.4; B D McKay, Dec 2005 */
#define USAGE "NRswitchg [-lq] [infile [outfile]]"
#define HELPTEXT \
" For each v, complement the edges from N(v) to V(G)-N(v)-v.\n\
\n\
The output file has a header if and only if the input file does.\n\
\n\
-l Canonically label outputs.\n\
-q Suppress auxiliary information.\n"
/*************************************************************************/
#include "gtools.h"
/**************************************************************************/
void
NRswitch(graph *g, int m, int n, int v, graph *h)
/* h := g with N-R edge set complemented */
{
register int i,j;
register setword *gv,*gi,*hi;
#if MAXN
set Nset[MAXM];
set Rset[MAXM];
#else
DYNALLSTAT(set,Nset,Nset_sz);
DYNALLSTAT(set,Rset,Rset_sz);
DYNALLOC1(set,Nset,Nset_sz,m,"NRswitchg");
DYNALLOC1(set,Rset,Rset_sz,m,"NRswitchg");
#endif
EMPTYSET(Rset,m);
for (i = 0; i < n; ++i) ADDELEMENT(Rset,i);
gv = GRAPHROW(g,v,m);
for (j = 0; j < m; ++j)
{
Nset[j] = gv[j];
Rset[j] ^= gv[j];
}
FLIPELEMENT(Rset,v);
gi = (setword*) g;
hi = (setword*) h;
for (i = 0; i < n; ++i)
{
if (i == v)
for (j = 0; j < m; ++j) hi[j] = gi[j];
else if (ISELEMENT(Nset,i))
for (j = 0; j < m; ++j) hi[j] = gi[j] ^ Rset[j];
else
for (j = 0; j < m; ++j) hi[j] = gi[j] ^ Nset[j];
gi += m;
hi += m;
}
}
/**************************************************************************/
int
main(int argc, char *argv[])
{
char *infilename,*outfilename;
FILE *infile,*outfile;
boolean badargs,dolabel,quiet;
int j,m,n,v,argnum;
int codetype,outcode;
graph *g;
nauty_counter nin,nout;
char *arg,sw;
static graph *gq;
double t;
#if MAXN
graph gc[MAXN*MAXM],h[MAXN*MAXM];
#else
DYNALLSTAT(graph,gc,gc_sz);
DYNALLSTAT(graph,h,h_sz);
#endif
HELP; PUTVERSION;
infilename = outfilename = NULL;
dolabel = quiet = FALSE;
argnum = 0;
badargs = FALSE;
for (j = 1; !badargs && j < argc; ++j)
{
arg = argv[j];
if (arg[0] == '-' && arg[1] != '\0')
{
++arg;
while (*arg != '\0')
{
sw = *arg++;
SWBOOLEAN('l',dolabel)
else SWBOOLEAN('q',quiet)
else badargs = TRUE;
}
}
else
{
++argnum;
if (argnum == 1) infilename = arg;
else if (argnum == 2) outfilename = arg;
else badargs = TRUE;
}
}
if (badargs)
{
fprintf(stderr,">E Usage: %s\n",USAGE);
GETHELP;
exit(1);
}
if (!quiet)
{
fprintf(stderr,">A NRswitchg");
if (dolabel) fprintf(stderr," -l");
if (argnum > 0) fprintf(stderr," %s",infilename);
if (argnum > 1) fprintf(stderr," %s",outfilename);
fprintf(stderr,"\n");
fflush(stderr);
}
if (infilename && infilename[0] == '-') infilename = NULL;
infile = opengraphfile(infilename,&codetype,FALSE,1);
if (!infile) exit(1);
if (!infilename) infilename = "stdin";
if (!outfilename || outfilename[0] == '-')
{
outfilename = "stdout";
outfile = stdout;
}
else if ((outfile = fopen(outfilename,"w")) == NULL)
{
fprintf(stderr,"Can't open output file %s\n",outfilename);
gt_abort(NULL);
}
if (codetype&SPARSE6) outcode = SPARSE6;
else outcode = GRAPH6;
if (codetype&HAS_HEADER)
{
if (outcode == SPARSE6) writeline(outfile,SPARSE6_HEADER);
else writeline(outfile,GRAPH6_HEADER);
}
if (dolabel) nauty_check(WORDSIZE,1,1,NAUTYVERSIONID);
nin = nout = 0;
t = CPUTIME;
while (TRUE)
{
if ((g = readg(infile,NULL,0,&m,&n)) == NULL) break;
++nin;
#if !MAXN
DYNALLOC2(graph,gc,gc_sz,n,m,"NRswitchg");
#endif
for (v = 0; v < n; ++v)
{
NRswitch(g,m,n,v,gc);
gq = gc;
if (dolabel)
{
#if !MAXN
DYNALLOC2(graph,h,h_sz,n,m,"compl");
#endif
fcanonise(gq,m,n,h,NULL,FALSE);
gq = h;
}
if (outcode == SPARSE6) writes6(outfile,gq,m,n);
else writeg6(outfile,gq,m,n);
++nout;
}
FREES(g);
}
t = CPUTIME - t;
if (!quiet)
fprintf(stderr,
">Z " COUNTER_FMT " graphs read from %s, "
COUNTER_FMT " written to %s; %3.2f sec.\n",
nin,infilename,nout,outfilename,t);
exit(0);
}

File Metadata

Mime Type
text/x-c
Expires
Tue, Oct 27, 3:52 PM (1 d, 4 h)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
407835
Default Alt Text
NRswitchg.c (4 KB)

Event Timeline