# cs4102lib.py module # version 1.0, March 15 2010 from collections import deque # based on http://docs.python.org/tutorial/datastructures.html#using-lists-as-queues class Queue: def __init__(self, data=[]): self.qdata = deque(data) #print "In constr:", self.qdata def add(self, item): self.qdata.append(item) def remove(self): if len(self.qdata) == 0: return None item = self.qdata.popleft() return item def front(self): if len(self.qdata) == 0: return None return self.qdata[0] def __str__(self): return str(self.qdata) def __len__(self): return len(self.qdata) class Graph: def __init__(self, adj_dict={}): self.adj_dict = adj_dict #print "In constr:", self.adj_dict def get_adjlist(self, vertex): return self.adj_dict.get(vertex, None) def is_adjacent(self, v1, v2): alist = self.adj_dict.get(v1, None) if alist == None: return False return v2 in alist def num_nodes(self): return len(self.adj_dict) # returns number of edge "items" in adj. lists # for digraph, this is number of edges. # for undirected graph, this is 2 x number of edges def num_edge_items(self): sum = 0 for v in self.adj_dict: sum = sum + len(self.adj_dict[v]) return sum def __str__(self): return str(self.adj_dict) def __iter__(self): return iter(self.adj_dict) def __contains__(self, value): return value in self.adj_dict def __len__(self): return len(self.adj_dict)