#define HELPTEXT \ " Make the subdivision graphs of a file of graphs.\n\
-k# Subdivide each edge by # new vertices (default1)\n\
\n\
The output file has a header if and only if the input file does.\n\
\n\
-q Suppress auxiliary information.\n"
staticvoid
subdivisiongraph(sparsegraph *g, int k, sparsegraph *h) /* h := subdivision graph of g, k new vertices per edge ;
version for undirected graphs. */
{
DYNALLSTAT(size_t,eno,eno_sz); /* edge number */
int *ge,*gd,*he,*hd;
size_t *gv,*hv;
int gnv,hnv;
size_t i,j,l,gnde,hnde,num;
size_t hi,lo,mid,w;
sortlists_sg(g);
if (k == 0)
{
copy_sg(g,h); return;
}
num = 0;
for (i = 0; i < gnv; ++i)
{
for (j = gv[i]; j < gv[i]+gd[i]; ++j)
{
if (ge[j] == i)
gt_abort(">E subdivideg can't handle undirected loops\n"); else if (ge[j] > i)
eno[j] = num++; else
{
lo = gv[ge[j]];
hi = lo + gd[ge[j]] - 1; while (lo <= hi)
{
mid = lo + (hi-lo)/2;
if (ge[mid] == i) break; else if (ge[mid] < i) lo = mid+1; else hi = mid-1;
}
if (lo > hi)
gt_abort(">E subdivideg : binary search failed\n");
eno[j] = eno[mid];
}
}
}
staticvoid
subdivisiondigraph(sparsegraph *g, int k, sparsegraph *h) /* h := subdivision graph of g, k new vertices per edge ;
version for directed graphs. */
{
int *ge,*gd,*he,*hd;
size_t *gv,*hv,hvend;
int gnv,hnv;
size_t i,j,l,t,v,gnde,hnde;
size_t hi,lo,mid,w;
sortlists_sg(g);
if (k == 0)
{
copy_sg(g,h); return;
}
SG_VDE(g,gv,gd,ge);
gnv = g->nv;
gnde = g->nde;
if (gnv + k*gnde > NAUTY_INFINITY-2)
gt_abort(">E result would be too large\n");
hnv = gnv + k*gnde;
hnde = gnde + k*gnde;
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.