コード例 #1
0
def test_case_2():
    vertex_to_name = {x: str(x + 1) for x in range(4)}
    edge_list = [
        Edge(0, 2, -2),
        Edge(1, 0, 4),
        Edge(1, 2, 3),
        Edge(2, 3, 2),
        Edge(3, 1, -1)
    ]
    g = Graph(Graph.GRAPH_TYPE_DIRECTED_WEIGHT, vertex_to_name, edge_list)
    node_text_map, edges, directed = g.get_show_info()
    GraphVisualization.show(node_text_map,
                            edges,
                            is_directed=directed,
                            view_graph=True,
                            rank_dir="LR")
    distances, paths = shortest_path_floyd_warshall(g)
    print("shortest path from and weight sum as:")
    for i in range(g.get_vertices_count()):
        for j in range(g.get_vertices_count()):
            path_str = "-".join(
                [g.get_vertex_name(vertex) for vertex in paths[i][j]])
            print("%s to %s: %s%s %d" %
                  (g.get_vertex_name(i), g.get_vertex_name(j), path_str, '*' *
                   (15 - len(path_str)), distances[i][j]))
コード例 #2
0
def test_case_1():
    vertex_to_name = {
        0: 'S',
        1: 'A',
        2: 'B',
        3: 'C',
        4: 'D',
        5: 'E',
        6: 'F',
        7: 'G'
    }
    g = Graph(Graph.GRAPH_TYPE_UNDIRECTED, vertex_to_name, None)
    g.add_edges([
        Edge(0, 1),
        Edge(0, 2),
        Edge(0, 3),
        Edge(1, 4),
        Edge(2, 5),
        Edge(3, 6),
        Edge(4, 7),
        Edge(5, 7),
        Edge(6, 7)
    ])
    node_text_map, edges, directed = g.get_show_info()
    GraphVisualization.show(node_text_map,
                            edges,
                            is_directed=directed,
                            view_graph=True,
                            rank_dir="LR")
    print('depth first traverse by iteration: ',
          [g.get_vertex_name(x) for x in depth_first_traverse_by_iteration(g)])
    print('depth first traverse by recursion: ',
          [g.get_vertex_name(x) for x in depth_first_traverse_by_recursion(g)])
    print('breadth first traverse: ',
          [g.get_vertex_name(x) for x in breadth_first_traverse(g)])
コード例 #3
0
def test_case_1():
    vertex_to_name = {x: str(x) for x in range(9)}
    edge_list = [
        Edge(0, 1, 4),
        Edge(0, 7, 8),
        Edge(1, 2, 8),
        Edge(1, 7, 11),
        Edge(2, 3, 7),
        Edge(2, 5, 4),
        Edge(2, 8, 2),
        Edge(3, 4, 9),
        Edge(3, 5, 14),
        Edge(4, 5, 10),
        Edge(5, 6, 2),
        Edge(6, 7, 1),
        Edge(6, 8, 6),
        Edge(7, 8, 7)
    ]
    g = Graph(Graph.GRAPH_TYPE_UNDIRECTED_WEIGHT, vertex_to_name, edge_list)
    node_text_map, edges, directed = g.get_show_info()
    GraphVisualization.show(node_text_map,
                            edges,
                            is_directed=directed,
                            view_graph=True,
                            rank_dir="LR")
    distances, paths = shortest_path_dijkstra(g, 1)
    print("shortest path from source and weight sum as:")
    for x in range(g.get_vertices_count()):
        path_str = "-".join([g.get_vertex_name(vertex) for vertex in paths[x]])
        print("%s%s %i" % (path_str, '*' * (15 - len(path_str)), distances[x]))
コード例 #4
0
def test_case_2():
    vertex_to_name = {x: str(x) for x in range(4)}
    edge_list = [Edge(0, 1, 1), Edge(0, 2, 4), Edge(0, 3, 3), Edge(1, 3, 2), Edge(2, 3, 5)]
    g = Graph(Graph.GRAPH_TYPE_UNDIRECTED_WEIGHT, vertex_to_name, edge_list)
    node_text_map, edges, directed = g.get_show_info()
    GraphVisualization.show(node_text_map, edges, is_directed=directed, view_graph=True, rank_dir="LR")
    weight_sum, edges = prim_algorithm(g)
    print('minimum span tree weight sum= ', weight_sum, ' select edges: ', edges)
コード例 #5
0
def test_case_1():
    dis_set = DisjointSet(4)
    dis_set.union(0, 1)
    dis_set.union(1, 2)
    dis_set.union(2, 3)
    dis_set.make_set(4)
    dis_set.union(1, 4)
    print(dis_set.parent, dis_set.rank)
    node_text_map, edges = dis_set.get_show_info()
    GraphVisualization.show(node_text_map, edges, is_directed=True, view_graph=True, rank_dir="TB")
コード例 #6
0
 def get_show_info(self):
     nodes_info = GraphVisualization.make_nodes({x: str(x) for x in range(len(self.parent))})
     edges = []
     for x in range(len(self.parent)):
         if self.parent[x] == x:
             edges.append((x, x, True))
         else:
             while self.parent[x] != x:
                 val = (self.parent[x], x, True)
                 if val not in edges:
                     edges.append(val)
                 x = self.parent[x]
     edges_info = GraphVisualization.make_edges(edges)
     return nodes_info, edges_info
コード例 #7
0
def test_case_2():
    dis_set = DisjointSet(10)
    dis_set.union(3, 4)
    dis_set.union(8, 4)
    dis_set.union(9, 4)
    dis_set.union(0, 6)
    dis_set.union(1, 2)
    dis_set.union(7, 2)
    dis_set.union(2, 6)
    dis_set.union(5, 6)
    print('before is 7 8 in same set ?', dis_set.find(7) == dis_set.find(8))
    dis_set.union(7, 3)
    print('after is 7 8 in same set ?', dis_set.find(7) == dis_set.find(8))
    print(dis_set.parent, dis_set.rank)
    node_text_map, edges = dis_set.get_show_info()
    GraphVisualization.show(node_text_map, edges, is_directed=True, view_graph=True, rank_dir="TB")
コード例 #8
0
 def sort(data_array, order="Desc"):
     heap_type = (order == "Desc" and "min") or "max"
     # 建立堆方式1 从最后一个节点父节点开始
     start_index = BinaryHeap.get_parent_index(len(data_array) - 1)
     for adjust_index in range(start_index, -1, -1):
         BinaryHeap.__move__down(heap_type, data_array, adjust_index)
     # 建立堆方式2 每个节点都向上调整
     # for i in range(len(input_data)):
     #     BinaryHeap.__move__up__(heap_type, input_data, i)
     bt = BinaryTree(data_array)
     node_text_map, edges = bt.get_show_info()
     GraphVisualization.show(node_text_map, edges, view_graph=True)
     # 依次与第i个元素交换 然后调整
     for i in range(len(data_array)-1, 0, -1):
         data_array[i], data_array[0] = data_array[0], data_array[i]
         BinaryHeap.__move__down(heap_type, data_array, 0, i)
     return data_array
コード例 #9
0
    def get_show_info(self):
        def get_edge_label(edge):
            if self.graph_type == Graph.GRAPH_TYPE_DIRECTED_WEIGHT or \
                            self.graph_type == Graph.GRAPH_TYPE_UNDIRECTED_WEIGHT:
                return str(
                    self.matrix[edge.from_vertex_index][edge.to_vertex_index])
            else:
                return None

        nodes_info = GraphVisualization.make_nodes(
            {str(x): y
             for x, y in self.vertex_index_to_name.items()})
        edges_info = GraphVisualization.make_edges([
            (_edge.from_vertex_index, _edge.to_vertex_index, True,
             get_edge_label(_edge)) for _edge in self.get_all_edges()
        ])
        is_directed = self.graph_type == Graph.GRAPH_TYPE_DIRECTED \
                        or self.graph_type == Graph.GRAPH_TYPE_DIRECTED_WEIGHT
        return nodes_info, edges_info, is_directed
コード例 #10
0
def test_case_2():
    # 森林的类型
    vertex_to_name = {
        0: 'A',
        1: 'B',
        2: 'C',
        3: 'D',
        4: 'E',
        5: 'F',
        6: 'P',
        7: 'Q',
        8: 'R',
        9: 'X',
        10: 'Y',
        11: 'Z'
    }
    g = Graph(Graph.GRAPH_TYPE_UNDIRECTED, vertex_to_name, None)
    g.add_edges([
        Edge(0, 1),
        Edge(0, 3),
        Edge(1, 2),
        Edge(3, 4),
        Edge(3, 5),
        Edge(6, 7),
        Edge(6, 8),
        Edge(9, 10),
        Edge(10, 11)
    ])
    node_text_map, edges, directed = g.get_show_info()
    GraphVisualization.show(node_text_map,
                            edges,
                            is_directed=directed,
                            view_graph=True,
                            rank_dir="LR",
                            description="Forest")
    print('depth first traverse by iteration: ',
          [g.get_vertex_name(x) for x in depth_first_traverse_by_iteration(g)])
    print('depth first traverse by recursion: ',
          [g.get_vertex_name(x) for x in depth_first_traverse_by_recursion(g)])
    print('breadth first traverse: ',
          [g.get_vertex_name(x) for x in breadth_first_traverse(g)])
コード例 #11
0
def test_case_1():
    vertex_to_name = {x: str(x + 1) for x in range(5)}
    edge_list = [
        Edge(0, 1),
        Edge(0, 2),
        Edge(1, 2),
        Edge(1, 3),
        Edge(2, 3),
        Edge(2, 4)
    ]
    g = Graph(Graph.GRAPH_TYPE_DIRECTED, vertex_to_name, edge_list)
    node_text_map, edges, directed = g.get_show_info()
    GraphVisualization.show(node_text_map,
                            edges,
                            is_directed=directed,
                            view_graph=True,
                            rank_dir="BT")
    print('one topological sort of by BFS is:  ',
          [vertex_to_name[x] for x in topological_sort_by_bfs(g)])
    print('one topological sort of by DFS is:  ',
          [vertex_to_name[x] for x in topological_sort_by_dfs(g)])
コード例 #12
0
    vertex_to_name = {
        0: 'S',
        1: 'A',
        2: 'B',
        3: 'C',
        4: 'D',
        5: 'E',
        6: 'F',
        7: 'G'
    }
    g = Graph(Graph.GRAPH_TYPE_UNDIRECTED, vertex_to_name, None)
    g.add_edge(Edge(0, 1))
    g.add_edge(Edge(0, 2))
    g.add_edge(Edge(0, 3))
    g.add_edge(Edge(1, 4))
    g.add_edge(Edge(2, 5))
    g.add_edge(Edge(3, 6))
    g.add_edge(Edge(4, 7))
    g.add_edge(Edge(5, 7))
    g.add_edge(Edge(6, 7))
    return g


if __name__ == "__main__":
    g = make_graph_3()
    node_text_map, edges, directed = g.get_show_info()
    GraphVisualization.show(node_text_map,
                            edges,
                            is_directed=directed,
                            view_graph=True,
                            rank_dir="LR")