comparison python/graph.py @ 269:5f8c04a8d26b

Towards better modularity
author Windel Bouwman
date Sun, 18 Aug 2013 17:43:18 +0200
parents
children cdc76d183bcc
comparison
equal deleted inserted replaced
268:5ec7580976d9 269:5f8c04a8d26b
1
2 class Graph:
3 """
4 Generic graph base class.
5 Can dump to graphiz dot format for example!
6 """
7 def __init__(self):
8 self.nodes = []
9 self.edges = []
10
11 def newNode(self):
12 n = Node(self)
13 self.nodes.append(n)
14 return n
15
16 def addEdge(self, n, m):
17 """ Add an edge from n to m """
18 if (n, m) not in self.edges and (m, n) not in self.edges:
19 self.edges.append((n, m))
20 n.succ.append(m)
21 m.pred.append(n)
22
23 def delEdge(self):
24 # TODO
25 pass
26
27 def to_dot(self, f):
28 """ Generate graphviz dot representation """
29 print('digraph G {', file=f)
30 for node in self.nodes:
31 print('{} [label="{}" shape=box3d];'.format(id(node), node), file=f)
32 for n, m in self.edges:
33 print('{} -> {};'.format(id(n), id(m)), file=f)
34 print('}', file=f)
35
36
37 class Node:
38 """
39 Node in a graph.
40 """
41 def __init__(self, g):
42 self.g = g
43 self.succ = []
44 self.pred = []
45