diff --git a/README.md b/README.md index fe11849..420c2b2 100644 --- a/README.md +++ b/README.md @@ -15,7 +15,7 @@ vertices. Three lines now contain a sorted() statement. 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 4 First argument is the number of vertices. Subsequent arguments are ordered pairs of comma separated vertices that make up the directed edges of the @@ -25,15 +25,16 @@ 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; @@ -46,6 +47,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 diff --git a/cycles.py b/cycles.py index a326740..971979f 100644 --- a/cycles.py +++ b/cycles.py @@ -12,8 +12,8 @@ import sys import networkx as nx from collections import defaultdict -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]) def simple_cycles(G): def _unblock(thisnode): @@ -73,9 +73,9 @@ def simple_cycles(G): G = nx.DiGraph() -for edge in sys.argv[2:]: - v1,v2 = edge.split(',', 1) - G.add_edge(v1,v2) +for edge in sys.stdin.readlines(): + v1,v2 = edge.split(' ', 1) + G.add_edge(v1.strip(),v2.strip()) for c in simple_cycles(G): print " ".join(c[:-1])