Advertisement
Guest User

graph.py

a guest
Oct 10th, 2012
63
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. # 6.00 Problem Set 11
  2. #
  3. # graph.py
  4. #
  5. # A set of data structures to represent graphs
  6. #
  7.  
  8. class Node(object):
  9.    def __init__(self, name):
  10.        self.name = str(name)
  11.    def getName(self):
  12.        return self.name
  13.    def __str__(self):
  14.        return self.name
  15.    def __repr__(self):
  16.       return self.name
  17.    def __eq__(self, other):
  18.       return self.name == other.name
  19.    def __ne__(self, other):
  20.       return not self.__eq__(other)
  21.  
  22. class Edge(object):
  23.    def __init__(self, src, dest):
  24.        self.src = src
  25.        self.dest = dest
  26.    def getSource(self):
  27.        return self.src
  28.    def getDestination(self):
  29.        return self.dest
  30.    def __str__(self):
  31.        return str(self.src) + '->' + str(self.dest)
  32.  
  33. class Rode(Edge):
  34.    def __init__(self, src, dest, dist, outsideDist):
  35.       Edge.__init__(self, src, dest)
  36.       self.dist = dist
  37.       self.outsideDist = outsideDist
  38.    def getDist(self):
  39.       return self.dist
  40.    def getOutsideDist(self):
  41.       return self.outsideDist
  42.    def __str__(self):
  43.       return str(self.src) + '->' + str(self.dest) +'     distance: '+str(self.dist) + '  outside distance: '+str(self.outsideDist)  
  44.  
  45. class Digraph(object):
  46.    """
  47.   A directed graph
  48.   """
  49.    def __init__(self):
  50.        self.nodes = set([])
  51.        self.edges = {}
  52.    def addNode(self, node):
  53.        if node in self.nodes:
  54.            raise ValueError('Duplicate node')
  55.        else:
  56.            self.nodes.add(node)
  57.            self.edges[node] = []
  58.    def addEdge(self, edge):
  59.        src = edge.getSource()
  60.        dest = edge.getDestination()
  61.        if not(src in self.nodes and dest in self.nodes):
  62.            raise ValueError('Node not in graph')
  63.        self.edges[src].append(dest)
  64.    def childrenOf(self, node):
  65.        return self.edges[node]
  66.    def hasNode(self, node):
  67.        print 'hasNode() in Digraph called.'
  68.        return node in self.nodes
  69.    def __str__(self):
  70.        res = ''
  71.        for k in self.edges:
  72.            for d in self.edges[k]:
  73.                res = res + str(k) + '->' + str(d) + '\n'
  74.        return res[:-1]
  75.  
  76. class campusMap(Digraph):
  77.    def __init__(self):
  78.       Digraph.__init__(self)
  79.    def addNode(self,node):
  80.       print 'addNode() in campusMap called.'
  81.       if node in self.nodes:
  82.            raise ValueError('Duplicate node')
  83.       else:
  84.          self.nodes.add(node)
  85.          print "Node ", node, " added."
  86.          self.edges[node] = {}
  87.    def addEdge(self,rode):
  88.       src = rode.getSource()
  89.       dest = rode.getDestination()
  90.       dist = rode.getDist()
  91.       outsideDist= rode.getOutsideDist()
  92.       if not(src in self.nodes and dest in self.nodes):
  93.          raise ValueError('Node not in graph')
  94.       self.edges[src][dest] = (dist, outsideDist)
  95.       print "Rode ", rode, " added"
  96.  
  97.    def childrenOf(self, node):
  98.       return self.edges[node]
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement