import string ##from graph import Digraph, Edge, Node class Node(object): def __init__(self, name): self.name = str(name) def getName(self): return self.name def __str__(self): return self.name def __repr__(self): return self.name def __eq__(self, other): return self.name == other.name def __ne__(self, other): return not self.__eq__(other) class Edge(object): def __init__(self, src, dest): self.src = src self.dest = dest def getSource(self): return self.src def getDestination(self): return self.dest def __str__(self): return str(self.src) + '->' + str(self.dest) ##class WeightedEdge(Edge): ## def __init__(self,src, dest, dist, weight): ## self.src = src ## self.dest = dest ## self.dist = dist ## self.weight = weight ## def getDist(self): ## return self.dist ## def getWeight(self): ## return self.weight class Digraph(object): def __init__(self): self.nodes = set([]) self.edges = {} def addNode(self, node): if node in self.nodes: raise ValueError('Duplicate node') else: self.nodes.add(node) self.edges[node] = [] def addEdge(self, edge): src = edge.getSource() print 'src',src dest = edge.getDestination() print 'dest',dest for s in self.nodes: print s if not(src in self.nodes and dest in self.nodes): raise ValueError('Node not in graph') self.edges[src].append(dest) def childrenOf(self, node): return self.edges[node] def hasNode(self, node): return node in self.nodes def __str__(self): res = '' for k in self.edges: for d in self.edges[k]: res = res + str(k) + '->' + str(d) + '\n' return res[:-1] # # Problem 2: Building up the Campus Map # # Write a couple of sentences describing how you will model the # problem as a graph) # mapFileName = 'mit_map.txt' def load_map(): """ Parses the map file and constructs a directed graph Parameters: mapFilename : name of the map file Assumes: Each entry in the map file consists of the following four positive integers, separated by a blank space: From To TotalDistance DistanceOutdoors e.g. 32 76 54 23 This entry would become an edge from 32 to 76. Returns: a directed graph representing the map """ #TODO s = ('32 36 70 0') map = Digraph() l = s.rsplit() n1 = Node(int(l[0])) print 'n',n1 n2 = Node(int(l[1])) print "n2",n2 edge1 = Edge(int(l[0]),int(l[1])) map.addNode(n1) map.addNode(n2) map.addEdge(edge1) load_map()