数据结构---图---知识点总结

转自:https://blog.csdn.net/Ontheroad_/article/details/72739380

图的存储结构

1.邻接矩阵:两个数组,一个数组保存“顶点集”,一个数组保存“边集”。


无向图中:


有向图中:


2.邻接表:数组与链表相结合的存储方法。



对于带权值的网图,可以在边表结点定义中再增加一个weight的数据域,存储权值信息即可。


扫描二维码关注公众号,回复: 1961066 查看本文章



图的遍历

1.深度优先遍历(DFS):类似于树的先序遍历(递归实现)。从图中某个顶点v出发,访问此顶点,然后从v的未被访问的邻接点出发深度优先遍历图,直至图中所有和v有路径想通的顶点都被访问到。

    伪代码实现:

def depth_tree(tree_node):
    if tree_node is not None:
        print(tree_node._data)
        if tree_node._left is not None:
            return depth_tree(tree_node._left)
        if tree_node._right is not None:
            return depth_tree(tree_node._right)

2.广度优先遍历(BFS):类似于树的层次遍历(队列实现)。

    python代码实现:

def level_queue(root):
    if root is None:
        return
    my_queue = []
    node = root
    my_queue.append(node)
    while my_queue:
        node = my_queue.pop(0)
	print(node.elem)
	if node.lchild is not None:
	    my_queue.append(node.lchild)
	if node.rchild is not None:
	    my_queue.append(node.rchild)

最小生成树

构造连通网的最小代价生成树。

1.普里姆:先将一个起点加入最小生成树,之后不断寻找与最小生成树相连的权值最小的边能通向的点,并将其加入最小生成树,直至所有顶点都在最小生成树中。

2.克鲁斯卡尔:在剩下的所有未选取的边中,找最小边,如果和已选取的边构成回路,则放弃,选取次小边。


最短路径

1.迪杰斯特拉算法:把图中的顶点集合V分成两组,第一组为已求出最短路径的顶点集合S(初始时S中只有源节点,以后每求得一条最短路径,就将它对应的顶点加入到集合S中,直到全部顶点都加入到S中);第二组是未确定最短路径的顶点集合U。

2.弗洛伊德算法

(1)从任意一条单边路径开始。所有两点之间的距离是边的权,如果两点之间没有边相连,则权为无穷大。

(2)对于每一对顶点u和v,看看是否存在一个顶点w使得从u到w再到v比已知的路径更短。如果是,则更新它。


猜你喜欢

转载自blog.csdn.net/liu123641191/article/details/80750767