コード例 #1
0
ファイル: symbol_graph.py プロジェクト: tata19900822/algs4-py
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
コード例 #2
0
ファイル: symbol_graph.py プロジェクト: tata19900822/algs4-py
    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]))
コード例 #3
0
        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))