Added "night" option to SOCgraphviz, fixed typos
This commit is contained in:
parent
b6cdd049bf
commit
6916498836
@ -32,7 +32,7 @@ To display help and exit, run the respective program without command-line argume
|
|||||||
### SOCgen
|
### SOCgen
|
||||||
```
|
```
|
||||||
$ ./SOCgen
|
$ ./SOCgen
|
||||||
Usage: ./SOCgen -n <order> [-r <num>] [--grpahviz] [FILTER ...]
|
Usage: ./SOCgen -n <order> [-r <num>] [--graphviz] [FILTER ...]
|
||||||
-n <order> Generate SOCs with `order' connected nodes
|
-n <order> Generate SOCs with `order' connected nodes
|
||||||
-r <num> Pick directed graphs at random, and exit after having found `num' SOCs
|
-r <num> Pick directed graphs at random, and exit after having found `num' SOCs
|
||||||
--graphviz Output SOCs in Graphviz format, arcs of common parents are highlighted
|
--graphviz Output SOCs in Graphviz format, arcs of common parents are highlighted
|
||||||
@ -42,7 +42,7 @@ Usage: ./SOCgen -n <order> [-r <num>] [--grpahviz] [FILTER ...]
|
|||||||
--no-sink ... without sink nodes (this logically implies -c)
|
--no-sink ... without sink nodes (this logically implies -c)
|
||||||
--no-source ... without source nodes (also this logically implies -c)
|
--no-source ... without source nodes (also this logically implies -c)
|
||||||
|
|
||||||
This program prints the found SOCs as adjacency matrices to stdout, unless --grpahviz has been specified.
|
This program prints the found SOCs as adjacency matrices to stdout, unless --graphviz has been specified.
|
||||||
To exclude (some) of the isomorphic SOCs, it uses a degree-order filter.
|
To exclude (some) of the isomorphic SOCs, it uses a degree-order filter.
|
||||||
```
|
```
|
||||||
|
|
||||||
@ -66,7 +66,7 @@ This program verifies the admissibility of simple directed graphs.
|
|||||||
### SOCgraphviz
|
### SOCgraphviz
|
||||||
```
|
```
|
||||||
$ ./SOCgraphviz
|
$ ./SOCgraphviz
|
||||||
Usage: ./SOCgraphviz <filename>
|
Usage: ./SOCgraphviz <filename> [night]
|
||||||
<filename> File name with adjacency matrices of simple directed graphs
|
<filename> File name with adjacency matrices of simple directed graphs
|
||||||
|
|
||||||
[FILE FORMAT]
|
[FILE FORMAT]
|
||||||
@ -75,6 +75,7 @@ Usage: ./SOCgraphviz <filename>
|
|||||||
The file `filename' may contain graphs with different order (number of vertices)
|
The file `filename' may contain graphs with different order (number of vertices)
|
||||||
|
|
||||||
This program translates to adjacency matrices into the Graphviz format, and prints them to stdout.
|
This program translates to adjacency matrices into the Graphviz format, and prints them to stdout.
|
||||||
|
Try the optional argument ``night'' for star-constallation-like output.
|
||||||
```
|
```
|
||||||
|
|
||||||
### removeiso.py
|
### removeiso.py
|
||||||
|
@ -482,7 +482,7 @@ int main(int argc, char *argv[]) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (UNKOPTION || n <= 1) {
|
if (UNKOPTION || n <= 1) {
|
||||||
fprintf(stderr, "Usage: %s -n <order> [-r <num>] [--grpahviz] [FILTER ...]\n", argv[0]);
|
fprintf(stderr, "Usage: %s -n <order> [-r <num>] [--graphviz] [FILTER ...]\n", argv[0]);
|
||||||
fprintf(stderr, " -n <order> Generate SOCs with `order' connected nodes\n");
|
fprintf(stderr, " -n <order> Generate SOCs with `order' connected nodes\n");
|
||||||
fprintf(stderr, " -r <num> Pick directed graphs at random, and exit after having found `num' SOCs\n");
|
fprintf(stderr, " -r <num> Pick directed graphs at random, and exit after having found `num' SOCs\n");
|
||||||
fprintf(stderr, " --graphviz Output SOCs in Graphviz format, arcs of common parents are highlighted\n");
|
fprintf(stderr, " --graphviz Output SOCs in Graphviz format, arcs of common parents are highlighted\n");
|
||||||
@ -492,7 +492,7 @@ int main(int argc, char *argv[]) {
|
|||||||
fprintf(stderr, " --no-sink ... without sink nodes (this logically implies -c)\n");
|
fprintf(stderr, " --no-sink ... without sink nodes (this logically implies -c)\n");
|
||||||
fprintf(stderr, " --no-source ... without source nodes (also this logically implies -c)\n");
|
fprintf(stderr, " --no-source ... without source nodes (also this logically implies -c)\n");
|
||||||
fprintf(stderr, "\n");
|
fprintf(stderr, "\n");
|
||||||
fprintf(stderr, "This program prints the found SOCs as adjacency matrices to stdout, unless --grpahviz has been specified.\n");
|
fprintf(stderr, "This program prints the found SOCs as adjacency matrices to stdout, unless --graphviz has been specified.\n");
|
||||||
fprintf(stderr, "To exclude (some) of the isomorphic SOCs, it uses a degree-order filter.\n");
|
fprintf(stderr, "To exclude (some) of the isomorphic SOCs, it uses a degree-order filter.\n");
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
@ -556,7 +556,7 @@ int main(int argc, char *argv[]) {
|
|||||||
padlen+3, SOCrate, padlen, ETC);
|
padlen+3, SOCrate, padlen, ETC);
|
||||||
fflush(stderr);
|
fflush(stderr);
|
||||||
}
|
}
|
||||||
// Convert graph index `grpahnumber' to the lists parents, children,
|
// Convert graph index `graphnumber' to the lists parents, children,
|
||||||
// parentslen, childrenlen
|
// parentslen, childrenlen
|
||||||
graphnrtolists(n, graphnumber, parents, parentslen, children, childrenlen);
|
graphnrtolists(n, graphnumber, parents, parentslen, children, childrenlen);
|
||||||
// Increase checked counter and prepare for next iteration
|
// Increase checked counter and prepare for next iteration
|
||||||
|
@ -4,11 +4,52 @@
|
|||||||
// SPDX-License-Identifier: GPL-3.0-or-later
|
// SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
|
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
|
#include <string.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <time.h>
|
||||||
|
|
||||||
|
// Global configuration for the "night" mode
|
||||||
|
const float maxSize = 0.1;
|
||||||
|
const float minSize = 0.001;
|
||||||
|
const char *starColors[] = {
|
||||||
|
"white",
|
||||||
|
"lightgray",
|
||||||
|
"darkslategray",
|
||||||
|
"lightyellow",
|
||||||
|
"purple",
|
||||||
|
"cyan",
|
||||||
|
"silver",
|
||||||
|
"khaki", "khaki1", "khaki2", "khaki3", "khaki4",
|
||||||
|
"gold", "gold1", "gold2", "gold3", "gold4",
|
||||||
|
"darkgoldenrod", "darkgoldenrod1", "darkgoldenrod2", "darkgoldenrod3", "darkgoldenrod4",
|
||||||
|
"darkorange", "darkorange1", "darkorange2", "darkorange3", "darkorange4",
|
||||||
|
"coral", "coral1", "coral2", "coral3", "coral4",
|
||||||
|
"chocolate", "chocolate1", "chocolate2", "chocolate3", "chocolate4",
|
||||||
|
"antiquewhite", "antiquewhite1", "antiquewhite2", "antiquewhite3", "antiquewhite4",
|
||||||
|
"azure", "azure1", "azure2", "azure3", "azure4",
|
||||||
|
"bisque", "bisque1", "bisque2", "bisque3", "bisque4",
|
||||||
|
"seashell", "seashell1", "seashell2", "seashell3", "seashell4",
|
||||||
|
"lightyellow", "lightyellow1", "lightyellow2", "lightyellow3", "lightyellow4",
|
||||||
|
"lightpink", "lightpink1", "lightpink2", "lightpink3", "lightpink4",
|
||||||
|
"burlywood", "burlywood1", "burlywood2", "burlywood3", "burlywood4",
|
||||||
|
"lavenderblush", "lavenderblush1", "lavenderblush2", "lavenderblush3", "lavenderblush4",
|
||||||
|
};
|
||||||
|
const size_t numColors = sizeof(starColors) / sizeof(starColors[0]);
|
||||||
|
|
||||||
|
void printgraphhead(char *filename, const int line, const int NIGHT) {
|
||||||
|
printf("strict digraph \"File_%s_line_%d\" {", filename, line);
|
||||||
|
if (NIGHT) {
|
||||||
|
double rsize = minSize + (((double)rand() / RAND_MAX) * (maxSize - minSize));
|
||||||
|
int rcolor = rand() % numColors;
|
||||||
|
printf(" bgcolor=\"black\";");
|
||||||
|
printf(" node [shape=point, color=%s, style=filled, width=%lf, height=%lf];", starColors[rcolor], rsize, rsize);
|
||||||
|
printf(" edge [color=lightgray, penwidth=0.5];");
|
||||||
|
}
|
||||||
|
}
|
||||||
int main(int argc, char *argv[]) {
|
int main(int argc, char *argv[]) {
|
||||||
// Parse command-line arguments
|
// Parse command-line arguments
|
||||||
if (argc != 2) {
|
if (argc != 2 && (argc != 3 || strcmp(argv[2], "night") != 0)) {
|
||||||
fprintf(stderr, "Usage: %s <filename>\n", argv[0]);
|
fprintf(stderr, "Usage: %s <filename> [night]\n", argv[0]);
|
||||||
fprintf(stderr, " <filename> File name with adjacency matrices of simple directed graphs\n");
|
fprintf(stderr, " <filename> File name with adjacency matrices of simple directed graphs\n");
|
||||||
fprintf(stderr, "\n");
|
fprintf(stderr, "\n");
|
||||||
fprintf(stderr, "[FILE FORMAT]\n");
|
fprintf(stderr, "[FILE FORMAT]\n");
|
||||||
@ -17,8 +58,11 @@ int main(int argc, char *argv[]) {
|
|||||||
fprintf(stderr, " The file `filename' may contain graphs with different order (number of vertices)\n");
|
fprintf(stderr, " The file `filename' may contain graphs with different order (number of vertices)\n");
|
||||||
fprintf(stderr, "\n");
|
fprintf(stderr, "\n");
|
||||||
fprintf(stderr, "This program translates to adjacency matrices into the Graphviz format, and prints them to stdout.\n");
|
fprintf(stderr, "This program translates to adjacency matrices into the Graphviz format, and prints them to stdout.\n");
|
||||||
|
fprintf(stderr, "Try the optional argument ``night'' for star-constallation-like output.\n");
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
const int NIGHT = argc - 2;
|
||||||
|
srand(time(NULL));
|
||||||
|
|
||||||
// Open file
|
// Open file
|
||||||
FILE *fp;
|
FILE *fp;
|
||||||
@ -33,14 +77,14 @@ int main(int argc, char *argv[]) {
|
|||||||
int n = -1;
|
int n = -1;
|
||||||
int row = 0;
|
int row = 0;
|
||||||
int col = 0;
|
int col = 0;
|
||||||
printf("strict digraph \"File_%s_line_%d\" {", argv[1], line);
|
printgraphhead(argv[1], line, NIGHT);
|
||||||
while (!feof(fp)) {
|
while (!feof(fp)) {
|
||||||
char ch = fgetc(fp);
|
char ch = fgetc(fp);
|
||||||
switch (ch) {
|
switch (ch) {
|
||||||
case '{':
|
case '{':
|
||||||
if (row == 0 && col == 0 && headprinted == 0) {
|
if (row == 0 && col == 0 && headprinted == 0) {
|
||||||
headprinted = 1;
|
headprinted = 1;
|
||||||
printf("strict digraph \"File_%s_line_%d\" {", argv[1], line);
|
printgraphhead(argv[1], line, NIGHT);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case '0':
|
case '0':
|
||||||
|
Loading…
Reference in New Issue
Block a user