read edges from stdin instead of argv
This commit is contained in:
parent
d6a0832864
commit
fda66157da
2 changed files with 19 additions and 13 deletions
22
README.md
22
README.md
|
@ -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
|
||||||
|
|
10
cycles.py
10
cycles.py
|
@ -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])
|
||||||
|
|
Loading…
Reference in a new issue