read edges from stdin instead of argv

main
josch 11 years ago
parent d6a0832864
commit fda66157da

@ -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

@ -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])

Loading…
Cancel
Save