class SymbolGraph: def __init__(self, stream, sp): self.st = ST() for line in open(stream): a = line.strip().split(sp) for i in range(len(a)): if not self.st.contains(a[i]): self.st.put(a[i], self.st.size()) self.keys = ["" for _ in range(self.st.size())] for key in self.st.keys(): self.keys[self.st.get(key)] = key self.G = Graph(self.st.size()) for line in open(stream): a = line.strip().split(sp) v = self.st.get(a[0]) for i in range(1, len(a)): self.G.add_edge(v, self.st.get(a[i])) def contains(self, s): return self.st.contains(s) def index(self, s): return self.st.get(s) def name(self, v): return self.keys[v] def graph(self): return self.G
def __init__(self, stream, sp): self.st = ST() for line in open(stream): a = line.strip().split(sp) for i in range(len(a)): if not self.st.contains(a[i]): self.st.put(a[i], self.st.size()) self.keys = ["" for _ in range(self.st.size())] for key in self.st.keys(): self.keys[self.st.get(key)] = key self.G = Graph(self.st.size()) for line in open(stream): a = line.strip().split(sp) v = self.st.get(a[0]) for i in range(1, len(a)): self.G.add_edge(v, self.st.get(a[i]))
path = Stack() x = v while x != self.s: path.push(x) x = self.edge_to[x] path.push(s) return path if __name__ == '__main__': import sys f = open(sys.argv[1]) s = int(sys.argv[2]) V = int(f.readline()) E = int(f.readline()) g = Graph(V) for i in range(E): v, w = f.readline().split() g.add_edge(v, w) dfs = DepthFirstPaths(g, s) for v in range(g.V): if dfs.has_path_to(v): print("%d to %d: " % (s, v), end='') for x in dfs.path_to(v): if x == s: print(x, end='') else: print('-%s' % x, end='') print() else: print("%d and %d: not connected" % (s, v))