python有向图遍历_【Python算法】遍历(Traversal)、深度优先(DFS)、广度优先(BFS)

本文介绍了图结构及其相关概念,包括简单图、连通图、树等。接着详细讲解了深度优先搜索(DFS)和广度优先搜索(BFS)的基本思想,并提供了Python实现的例子。此外,还提到了图的连通分量、强连通分量的查找方法,以及基于深度优先搜索的拓扑排序和迭代深度的深度优先搜索。
摘要由CSDN通过智能技术生成

图结构:

非常强大的结构化思维(或数学)模型。如果您能用图的处理方式来规范化某个问题,即使这个问题本身看上去并不像个图问题,也能使您离解决问题更进一步。

在众多图算法中,我们常会用到一种非常实用的思维模型--遍历(traversal):对图中所有节点的探索及访问操作。

图的一些相关概念:

简单图(Simple graph):无环并且无平行边的图.

路(path):内部点互不相同的链。

如果无向图G中每一对不同的顶点x和y都有一条路,(即W(G)=1,连通分支数)则称G是连通图,反之称为非连通图。

两端点相同的路(即闭路)称为圈(cycle)。

树(tree)是无圈连通无向图。树中度数为1的结点称为树的叶结点。树中度数大于1的结点称为树的分支节点或内部结点。

不相交的若干树称为森林(forest),即森林的每个连通分支是树。

定理1:T是树<=>T中无环,且任何不同两顶点间有且仅有一条路。

定理2:T是树<=>T连通且|e|=n-1,|e|为T的边数,n为T的顶点数。

由根到某一顶点v的有向路的长度,称为顶点v的层数(level)。根树的高度就是顶点层数的最大值。

深度优先搜索:

求连通简单图G的一棵生成树的许多方法中,深度优先搜索(depth first search)是一个十分重要的算法。

基本思想:

任意选择图G的一个顶点V0作为根,通过相继地添加边来形成在顶点V0开始的路,其中每条新边都与路上的最后一个顶点以及不在路上的一个顶点相关联。

继续尽可能多地添加边到这条路。若这条路经过图G的所有顶点,则这条路即为G的一棵生成树;

若这条路没有经过G的所有顶点,不妨设形成这条路的顶点顺序V0,V1,......,Vn。则返回到路里的次最后顶点V(n-1).

若有可能,则形成在顶点v(n-1)开始的经过的还没有放过的顶点的路;

否则,返回到路里的顶点v(n-2)。

然后再试。重复这个过程,在所访问过的最后一个顶点开始,在路上次返回的顶点,只要有可能就形成新的路,直到不能添加更多的边为止。

深度优先搜索也称为回溯(back tracking)

栗子:

用深度优先搜索来找出图3-9所示图G的生成树,任意地从顶点d开始,生成步骤显示在图3-10。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值