人工智能大作业——python实现BFS和DFS算法

这篇博客详细介绍了如何使用Python实现BFS和DFS算法,包括算法设计过程、复杂度分析以及源代码展示。BFS通过队列进行节点遍历,而DFS则利用栈进行深度优先搜索。在邻接表和邻接矩阵存储结构下,两种算法的时间和空间复杂度有所不同。
摘要由CSDN通过智能技术生成

python实现BFS和DFS算法

1 需要遍历的图

需要遍历的图

2 算法设计过程

2.1 BFS程序设计

算法步骤:

1、创建一个队列,选择遍历的起点插入到队列中。
2、创建一个记录节点是否被遍历过的set,以防止节点被多次遍历形成(多次遍历亦有可能陷入死循环)。
3、当队列不为空时,从队中弹出节点并输出以记录。并依次遍历将该节点的下一层节点,依次插入到队尾。插到队尾之前需要先检查该子节点是否已被遍历,遍历过则不插入,没遍历过则插入并在visited集合中记录该点。
4、重复3直到队列为空,此时所有节点均被遍历,并且是“由内向外”。

复杂度分析:

需要注意的是复杂度的好坏取决于图的存储结构,也就是图是以邻接表存储还是以邻接矩阵存储。

  • 时间复杂度:
    邻接表存储时,从一个顶点开始搜索时,访问未被访问过的节点,最坏情况下是所有邻接点均未被访问过(即遍历所有点所有边后才找到终点),这时每个邻接点和边均要被访问一次(邻接表是一维数组存节点,链表存边(节点间关系)来实现的),所以 T = O ( V + E ) T=O(V+E) T=OV+E,其中V是顶点数,E是边数。
    邻接矩阵存储时,查找每个顶点的邻接点所需时间为 O ( V ) O(V) O(V)(邻接矩阵是由二维数组存储边,一维数组存储点来实现的),即遍历该节点所在的该行该列。又有n个顶点,故算总的时间复杂度为 O ( ∣ V ∣ 2 ) O(|V|^2) O(V
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值