コード例 #1
0
 def pathTo(self, v):
     x = v
     path = Stack.create()
     while x != self.s:
         path.push(x)
         x = self.edgeTo[x]
     path.push(self.s)
     return path.iterate()
コード例 #2
0
ファイル: shortest_path.py プロジェクト: vertexproject/pyalgs
    def shortestPathTo(self, v):
        path = Stack.create()
        x = v
        while x != self.s:
            path.push(self.edgeTo[x])
            x = self.edgeTo[x].start()

        return path.iterate()
コード例 #3
0
    def __init__(self, G):
        if isinstance(G, DirectedEdgeWeightedGraph):
            G = G.to_digraph()

        self.reversePostOrder = Stack.create()
        vertex_count = G.vertex_count()
        self.marked = [False] * vertex_count

        for v in range(vertex_count):
            if not self.marked[v]:
                self.dfs(G, v)
コード例 #4
0
ファイル: shortest_path.py プロジェクト: vertexproject/pyalgs
    def shortestPathTo(self, v):
        path = Stack.create()
        x = v
        counter = 0
        while x != self.s:
            path.push(self.edgeTo[x])
            if self.edgeTo[x] is None:
                return None
            x = self.edgeTo[x].start()
            counter += 1
            if counter > self.vertexCount:
                return None

        return path.iterate()
コード例 #5
0
    def test_push(self):
        stack = Stack.create()
        stack.push(10)
        stack.push(1)

        print([i for i in stack.iterate()])

        self.assertFalse(stack.is_empty())
        self.assertEqual(2, stack.size())
        self.assertEqual(1, stack.pop())
        self.assertFalse(stack.is_empty())
        self.assertEqual(1, stack.size())
        self.assertEqual(10, stack.pop())
        self.assertTrue(stack.is_empty())

        for i in range(100):
            stack.push(i)
コード例 #6
0
    def dfs(self, G, v):
        self.marked[v] = True
        self.onStack[v] = True

        for w in G.adj(v):
            if not self.marked[w]:
                self.edgeTo[w] = v
                self.dfs(G, w)
            elif self.cycle is not None:
                break
            elif self.onStack[w]:
                self.cycle = Stack.create()
                x = v
                while x != w:
                    self.cycle.push(x)
                    x = self.edgeTo[x]
                self.cycle.push(w)
                self.cycle.push(v)
                break

        self.onStack[v] = False
コード例 #7
0
 def __init__(self):
     self.stack = Stack.create()