read edges from stdin instead of argv

This commit is contained in:
josch 2013-04-11 10:19:32 +02:00
parent d6a0832864
commit fda66157da
2 changed files with 19 additions and 13 deletions

View file

@ -15,7 +15,7 @@ vertices. Three lines now contain a sorted() statement.
Usage 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 First argument is the number of vertices. Subsequent arguments are ordered
pairs of comma separated vertices that make up the directed edges of the 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 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 Given a DOT file of a simple (no labels, colors, styles, only pairs of
vertices...) directed graph, the following line produces commandline vertices...) directed graph, the following lines generate the number of
arguments in the above format for that graph. 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 { digraph G {
0; 0;
@ -46,6 +47,11 @@ The above line works on DOT files like the following:
2 -> 1; 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

View file

@ -12,8 +12,8 @@ import sys
import networkx as nx import networkx as nx
from collections import defaultdict from collections import defaultdict
if len(sys.argv) < 3: if len(sys.argv) != 2:
print "usage: %s num_vertices [v1,v2...]"%(sys.argv[0]) print "usage: echo \"v1 v2\nv1 v3\n...\" | %s num_vertices"%(sys.argv[0])
def simple_cycles(G): def simple_cycles(G):
def _unblock(thisnode): def _unblock(thisnode):
@ -73,9 +73,9 @@ def simple_cycles(G):
G = nx.DiGraph() G = nx.DiGraph()
for edge in sys.argv[2:]: for edge in sys.stdin.readlines():
v1,v2 = edge.split(',', 1) v1,v2 = edge.split(' ', 1)
G.add_edge(v1,v2) G.add_edge(v1.strip(),v2.strip())
for c in simple_cycles(G): for c in simple_cycles(G):
print " ".join(c[:-1]) print " ".join(c[:-1])