Пример #1
0
def test_dijkstra_single_source_single_target():
    dg = DirectGraph()
    a = Vertex('a')
    b = Vertex('b')
    c = Vertex('c')
    d = Vertex('d')
    e = Vertex('e')
    f = Vertex('f')
    g = Vertex('g')
    dg.add_vertex(a)
    dg.add_vertex(b)
    dg.add_vertex(c)
    dg.add_vertex(d)
    dg.add_vertex(e)
    dg.add_vertex(f)
    dg.add_vertex(g)
    dg.add_edge(a, b, 2)
    dg.add_edge(d, a, 3)
    dg.add_edge(b, c, 3)
    dg.add_edge(c, d, 5)
    dg.add_edge(c, e, 6)
    dg.add_edge(c, f, 4)
    dg.add_edge(g, e, 1)
    dg.add_edge(f, g, 2)
    dg.add_edge(b, e, 2)
    dg.add_edge(e, g, 3)

    s, t = a, g

    d, pai = dijkstra_single_source_single_target(dg, s, t)
    print(d, pai)
    print('=======')
    print_shortest_path(pai, s, t)
Пример #2
0
def test_dijkstra():
    dg = DirectGraph()
    a = Vertex('a')
    b = Vertex('b')
    c = Vertex('c')
    d = Vertex('d')
    e = Vertex('e')
    f = Vertex('f')
    g = Vertex('g')
    dg.add_vertex(a)
    dg.add_vertex(b)
    dg.add_vertex(c)
    dg.add_vertex(d)
    dg.add_vertex(e)
    dg.add_vertex(f)
    dg.add_vertex(g)
    dg.add_edge(a, b, 2)
    dg.add_edge(d, a, 3)
    dg.add_edge(b, c, 3)
    dg.add_edge(c, d, 5)
    dg.add_edge(c, e, 6)
    dg.add_edge(c, f, 4)
    dg.add_edge(g, e, 1)
    dg.add_edge(f, g, 2)
    dg.add_edge(b, e, 2)
    dg.add_edge(e, g, 3)

    d, pai = dijkstra(dg, a)
    print(d, pai)
Пример #3
0
def test_topology():
    dag = DirectGraph()
    a = Vertex('a')
    b = Vertex('b')
    c = Vertex('c')
    d = Vertex('d')
    e = Vertex('e')
    f = Vertex('f')
    g = Vertex('g')
    dag.add_vertex(a)
    dag.add_vertex(b)
    dag.add_vertex(c)
    dag.add_vertex(d)
    dag.add_vertex(e)
    dag.add_vertex(f)
    dag.add_vertex(g)

    dag.add_edge(a, b)
    dag.add_edge(b, c)
    dag.add_edge(c, d)
    dag.add_edge(e, c)
    dag.add_edge(c, g)
    dag.add_edge(c, f)
    dag.add_edge(d, f)

    order = topology(dag)
    print(order)
Пример #4
0
def test():
    # 以下图中有两条关键路径
    # 1: a-->b-->e-->g-->h
    # 2: a-->b-->e-->f-->h
    dag = DirectGraph()
    a = Vertex('a')
    b = Vertex('b')
    c = Vertex('c')
    d = Vertex('d')
    e = Vertex('e')
    f = Vertex('f')
    g = Vertex('g')
    h = Vertex('h')
    i = Vertex('i')

    dag.add_vertex(a)
    dag.add_vertex(b)
    dag.add_vertex(c)
    dag.add_vertex(d)
    dag.add_vertex(e)
    dag.add_vertex(f)
    dag.add_vertex(g)
    dag.add_vertex(h)
    dag.add_vertex(i)

    dag.add_edge(a, b, 6)
    dag.add_edge(a, c, 4)
    dag.add_edge(a, d, 5)
    dag.add_edge(b, e, 1)
    dag.add_edge(c, e, 1)
    dag.add_edge(d, i, 2)
    dag.add_edge(e, f, 9)
    dag.add_edge(e, g, 7)
    dag.add_edge(f, h, 2)
    dag.add_edge(g, h, 4)
    dag.add_edge(i, g, 4)

    key_path = find_key_path(dag)
    print(key_path)
Пример #5
0
def test_cycle():
    dag = DirectGraph()
    a = Vertex('a')
    b = Vertex('b')
    c = Vertex('c')
    d = Vertex('d')
    e = Vertex('e')
    f = Vertex('f')
    g = Vertex('g')
    h = Vertex('h')
    dag.add_vertex(a)
    dag.add_vertex(b)
    dag.add_vertex(c)
    dag.add_vertex(d)
    dag.add_vertex(e)
    dag.add_vertex(f)
    dag.add_vertex(g)
    dag.add_vertex(h)
    dag.add_edge(a, b, 2)
    dag.add_edge(d, a, 3)
    dag.add_edge(b, c, 3)
    dag.add_edge(c, d, 5)
    dag.add_edge(c, e, 6)
    dag.add_edge(c, f, 4)
    dag.add_edge(g, e, 1)
    dag.add_edge(f, g, 2)
    dag.add_edge(b, e, 2)
    dag.add_edge(e, g, 3)
    dag.add_edge(g, c, 3)

    order = topology(dag)
    print(order)
Пример #6
0
def test_floyd():
    dag = DirectGraph()
    a = Vertex('a')
    b = Vertex('b')
    c = Vertex('c')
    d = Vertex('d')
    e = Vertex('e')
    f = Vertex('f')
    g = Vertex('g')
    h = Vertex('h')
    dag.add_vertex(a)
    dag.add_vertex(b)
    dag.add_vertex(c)
    dag.add_vertex(d)
    dag.add_vertex(e)
    dag.add_vertex(f)
    dag.add_vertex(g)
    # dag.add_vertex(h)
    dag.add_edge(a, b, 2)
    dag.add_edge(d, a, 3)
    dag.add_edge(b, c, 3)
    dag.add_edge(c, d, 5)
    dag.add_edge(c, e, 6)
    dag.add_edge(c, f, 4)
    dag.add_edge(g, e, 1)
    dag.add_edge(f, g, 2)
    dag.add_edge(b, e, 2)
    dag.add_edge(e, g, 3)
    dag.add_edge(g, c, 3)
    d, p, vexes = floyd(dag)
    pprint.pprint(vexes)
    pprint.pprint(d)
    pprint.pprint(p)
Пример #7
0
def test():
    dag = DirectGraph()
    a = Vertex('a')
    b = Vertex('b')
    c = Vertex('c')
    d = Vertex('d')
    e = Vertex('e')
    f = Vertex('f')
    g = Vertex('g')
    h = Vertex('h')
    dag.add_vertex(a)
    dag.add_vertex(b)
    dag.add_vertex(c)
    dag.add_vertex(d)
    dag.add_vertex(e)
    dag.add_vertex(f)
    dag.add_vertex(g)
    dag.add_vertex(h)
    dag.add_edge(a, b, 2)
    dag.add_edge(d, a, 3)
    dag.add_edge(b, c, 3)
    dag.add_edge(c, d, 5)
    dag.add_edge(c, e, 6)
    dag.add_edge(c, f, 4)
    dag.add_edge(g, e, 1)
    dag.add_edge(f, g, 2)
    dag.add_edge(b, e, 2)
    dag.add_edge(e, g, 3)
    dag.add_edge(g, c, 3)
    try:
        df, db, paif, paib, n = bi_dijkstra(dag, g, a)
        print('df: ', df)
        print('db: ', db)
        print('paif: ', paif)
        print('paib ', paib)
        print_shortest_path(paif, paib, n)
    except NoPathException as e:
        print(e)