read edges from stdin instead of argv

main
josch 11 years ago
parent ecc6296d85
commit ca090daabe

@ -11,25 +11,26 @@ Algorithm by R. Tarjan
Usage
-----
python cycles.py 4 0,1 0,2 1,0 1,3 2,0 3,0 3,1 3,2
echo "0 1\n0 2\n1 0\n1 3\n2 0\n3 0\n3 1\n3 2" | python cycles.py
First argument is the number of vertices. Subsequent arguments are ordered
pairs of comma separated vertices that make up the directed edges of the
First argument is the number of vertices. Ordered pairs of space separated
vertices are given via standard input and make up the directed edges of the
graph.
DOT file input
--------------
For simplicity, there is no DOT file parser included but the following allows
to create a suitable argument string for simple DOT graphs.
to create a suitable argument string and standard input for simple DOT graphs.
Given a DOT file of a simple (no labels, colors, styles, only pairs of
vertices...) directed graph, the following line produces commandline
arguments in the above format for that graph.
vertices...) directed graph, the following lines generate the number of
vertices as well as the edge list expected on standard input.
echo `sed -n -e '/^\s*[0-9]\+;$/p' graph.dot | wc -l` `sed -n -e 's/^\s*\([0-9]\) -> \([0-9]\);$/\1,\2/p' graph.dot`
sed -n -e '/^\s*[0-9]\+;$/p' graph.dot | wc -l
sed -n -e 's/^\s*\([0-9]\) -> \([0-9]\);$/\1 \2/p' graph.dot
The above line works on DOT files like the following:
The above lines works on DOT files like the following:
digraph G {
0;
@ -42,6 +43,11 @@ The above line works on DOT files like the following:
2 -> 1;
}
It would produce the following output:
They would produce the following output:
3 0,1 0,2 1,0 2,0 2,1
3
0 1
0 2
1 0
2 0
2 1

@ -61,13 +61,13 @@ procedure circuit_enumeration;
import sys
if len(sys.argv) < 3:
print "usage: %s num_vertices [v1,v2...]"%(sys.argv[0])
if len(sys.argv) != 2:
print "usage: echo \"v1 v2\nv1 v3\n...\" | %s num_vertices"%(sys.argv[0])
A = [[] for a in range(int(sys.argv[1]))]
for edge in sys.argv[2:]:
v1,v2 = edge.split(',', 1)
for edge in sys.stdin.readlines():
v1,v2 = edge.split(' ', 1)
A[int(v1)].append(int(v2));
def print_point_stack():

Loading…
Cancel
Save