Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #1/usr/bin/env python
- # this is from The Python
- # Standard Library by example
- # ISBN13: 9780321767349
- import pickle
- class Node(object):
- """A simple digraph """
- def __init__(self, name):
- self.name = name
- self.connections = []
- def add_edge(self, node):
- "Create an edge between this node and the other."
- self.connections.append(node)
- def __iter__(self):
- return iter(self.connections)
- def preorder_traversal(root, seen=None, parent=None):
- """Generator function to yield the edges in a graph.
- """
- if seen is None:
- seen = set()
- yield (parent, root)
- if root in seen:
- return
- seen.add(root)
- for node in root:
- for parent, subnode in preorder_traversal(node, seen, root):
- yield (parent, subnode)
- def show_edges(root):
- "Print all the edges in the graph."
- for parent, child in preorder_traversal(root):
- if not parent:
- continue
- print '%5s -> %2s (%s)' % \
- (parent.name, child.name, id(child))
- # Set up the nodes.
- root = Node('root')
- a = Node('a')
- b = Node('b')
- c = Node('c')
- # Add edges between them.
- root.add_edge(a)
- root.add_edge(b)
- a.add_edge(b)
- b.add_edge(a)
- b.add_edge(c)
- a.add_edge(a)
- print 'ORIGINAL GRAPH:'
- show_edges(root)
- # Pickle and unpickle the graph to create
- # a new set of nodes.
- dumped = pickle.dumps(root)
- reloaded = pickle.loads(dumped)
- print '\nRELOADED GRAPH:'
- show_edges(reloaded)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement