]> granicus.if.org Git - graphviz/commitdiff
Update man page, and fix number of nodes in the 2D Sierpinski graph; untagged-4a0354222931f4cf012e
authorEmden Gansner <emdenrg@google.com>
Tue, 22 Nov 2016 18:33:28 +0000 (13:33 -0500)
committerEmden Gansner <emdenrg@google.com>
Tue, 22 Nov 2016 18:33:28 +0000 (13:33 -0500)
fix edge count for 3D Sierpinski in graph_generator.c;
modify CLI to use -S for Sierpinski in any dimension.

cmd/tools/graph_generator.c
cmd/tools/gvgen.1
cmd/tools/gvgen.c

index be8439a9f669bc9ccc937682d5a48de9fd1e374b..fca0838b06b1b6fb7b8490e1d2d0626e9eac37b0 100644 (file)
@@ -393,7 +393,7 @@ void makeTetrix(int depth, edgefn ef)
     depth--;
     n = 4 + 2 * (((int) (pow(4.0, (double) depth) + 0.5) - 1));
 
-    nedges = (int) (pow(6.0, depth + 1.0) + 0.5);
+    nedges = 6 * (int) (pow(4.0, depth) + 0.5);
 
     graph = N_NEW(n + 1, vtx_data);
     edges = N_NEW(6 * n, int);
index 7683ef47ffd1eed37d4e8684663533ece8d52d4f..7aa75f4e79dc7c76216dafde8b20807aa7410119 100644 (file)
@@ -55,6 +55,9 @@ gvgen \- generate graphs
 .BI -S n
 ]
 [
+.BI -S n,d
+]
+[
 .BI -t n
 ]
 [
@@ -154,9 +157,15 @@ This will have \fIn-1\fP edges.
 .TP
 .BI \-S " n"
 Generate a Sierpinski graph of order \fIn\fP.
-This will have \fI3*(3^(n-1) - 1)/2\fP vertices and
+This will have \fI3*(3^(n-1) + 1)/2\fP vertices and
 \fI3^n\fP edges.
 .TP
+.BI \-S " n,d"
+Generate a \fId\fP-dimensional Sierpinski graph of order \fIn\fP.
+At present, \fId\fP must be 2 or 3.
+For d equal to 3, there will be \fI4*(4^(n-1) + 1)/2\fP vertices and
+\fI6 * 4^(n-1)\fP edges.
+.TP
 .BI \-t " n"
 Generate a binary tree of height \fIn\fP.
 This will have \fI2^n-1\fP vertices and
index bdfcd34bb72912ce7fdbf3c4422c65fc35a9a00a..662343ed0f428324bc5110ff237896db4fa350c0 100644 (file)
@@ -34,7 +34,7 @@
 
 typedef enum { unknown, grid, circle, complete, completeb, 
     path, tree, torus, cylinder, mobius, randomg, randomt, ball,
-    sierpinski, tetrix, hypercube, star, wheel, trimesh
+    sierpinski, hypercube, star, wheel, trimesh
 } GraphType;
 
 typedef struct {
@@ -91,8 +91,8 @@ static char *Usage = "Usage: %s [-dv?] [options]\n\
  -r<x>,<n>     : random graph\n\
  -R<n>         : random rooted tree on <n> vertices\n\
  -s<x>         : star\n\
- -S<x>         : sierpinski\n\
- -X<x>         : tetrix (3d sierpinski)\n\
+ -S<x>         : 2D sierpinski\n\
+ -S<x>,<d>     : <d>D sierpinski (<d> = 2,3)\n\
  -t<x>         : binary tree \n\
  -t<x>,<n>     : n-ary tree \n\
  -T<x,y>       : torus \n\
@@ -375,14 +375,13 @@ static GraphType init(int argc, char *argv[], opts_t* opts)
            break;
        case 'S':
            graphType = sierpinski;
-           if (setOne(optarg, opts))
+           if (setTwoOpt(optarg, opts, 2))
                errexit(c);
-           break;
-       case 'X':
-               graphType = tetrix;
-               if (setOne(optarg, opts))
+           if (opts->graphSize2 > 3) {
+               fprintf(stderr, "%dD Sierpinski not implemented - use 2 or 3 ", opts->graphSize2);
                errexit(c);
-               break;
+           }
+           break;
        case 's':
            graphType = star;
            if (setOne(optarg, opts))
@@ -513,10 +512,10 @@ int main(int argc, char *argv[])
        makeMobius(opts.graphSize1, opts.graphSize2, ef);
        break;
     case sierpinski:
-       makeSierpinski(opts.graphSize1, ef);
-       break;
-       case tetrix:
-       makeTetrix(opts.graphSize1, ef);
+       if (opts.graphSize2 == 2)
+           makeSierpinski(opts.graphSize1, ef);
+       else
+           makeTetrix(opts.graphSize1, ef);
        break;
     case complete:
        makeComplete(opts.graphSize1, ef);