def edges(self): """ Returns all directed edges in this edge-weighted digraph. :return: all edges in this edge-weighted digraph :rtype: collections.iterable[DirectedEdge] """ edges = Bag() for v in range(self._V): for e in self._adj[v]: edges.add(e) return edges
def main(): """Unit tests the DirectedDFS data type.""" G = Digraph.from_stream(InStream(None)) sources = Bag() for i in range(1, len(sys.argv)): s = int(sys.argv[i]) sources.add(s) dfs = DirectedDFS(G, *sources) print("Reachable vertices:") for v in range(0, G.V()): if dfs.is_marked(v): print(v, end=" ") print()
def edges(self): """ Returns all edges in this edge-weighted graph. :return: all edges in this edge-weighted graph """ edges = Bag() for v in range(self._V): self_loops = 0 for e in self.adj(v): if e.other(v) > v: edges.add(e) elif e.other(v) is v: if self_loops % 2 is 0: edges.add(e) self_loops += 1 return edges
def recognizes(self, txt): """Returns True if the text is matched by the regular expression. :param txt: the text :returns: True if the text is matched by the regular expression; False otherwise """ regex = self.regex graph = self.graph m = self.m dfs = DirectedDFS(graph, 0) pc = Bag() for v in range(0, graph.V()): if dfs.is_marked(v): pc.add(v) # Compute possible NFA states for txt[i+1] for i in range(0, len(txt)): if txt[i] == "*" or txt[i] == "|" or txt[i] == "(" or txt[i] == ")": raise ValueError("text contains the metacharacter '{}'".format( txt[i])) match = Bag() for v in pc: if v == m: continue if regex[v] == txt[i] or regex[i] == ".": match.add(v + 1) dfs = DirectedDFS(graph, *match) pc = Bag() for v in range(0, graph.V()): if dfs.is_marked(v): pc.add(v) # Optimization if no states reachable if pc.size() == 0: return False for v in pc: if v == m: return True return False
def edges(self): edges = Bag() for v in range(self._V): for e in self._adj[v]: edges.add(e) return edges