{面试常见算法80题: {图: [广度优先搜索]}}

{面试常见算法80题: {图: [广度优先搜索]}}

介绍

广度优先搜索可以找到起点到目的顶点的最短路径。遍历一个图,和遍历一个树是类似的,但是图里面可能存在环,所以遍历的时候,可能会回到先前已经经过的顶点。为了避免这种情况,用一个数组来保存顶点的状态。

比如下面的一个图,我们从顶点 2 开始,当我们到达顶点 0 时,我们寻找所有与它相邻的顶点,发现 2 也与它相邻。如果我们不把访问过的顶点打上标记,那么我们会回到顶点 2 ,这样会造成一个无限循环。

简便起见,假设从起始顶点可以到达任何其他的顶点。利用广度优先搜索来遍历这个图,可以得到 2, 0, 3, 1 。



思路

  1. 构造 Graph 类,添加可以连通的两个顶点(即有方向的边)
  2. 构造一个包含 False , True 的列表,用来记录顶点是否被访问过
  3. 构造一个队列式的列表,每次从中取出一个元素作为当下的起点,并从列表中删除该顶点
  4. 起点被访问后,寻找它能够到达的其他顶点
  5. 如果其他顶点没有被访问过,则修改它的状态,表示已访问
  6. 当队列中没有元素时,说明所有顶点都已经访问过



代码


输出


解读

self.graph = {0: [1, 2], 1: [2], 2: [0, 3], 3: [3]}








总结

需注意,这里的情况是给定一个顶点,它可以到达其他任何顶点,但在非连通图中有些顶点可能无法达到。这时候若要遍历图中的所有顶点,可以让广度优先搜索从所有的顶点开始。

该算法的时间复杂度是 O(V+E), V 是所有的顶点数,E 是所有的边数。



附录

参考链接: Breadth First Traversal for a Graph

参考书籍:

文章全文(GitHub): {面试常见算法80题: {图: [广度优先搜索]}}

测试通过的代码(Python3): Graph-1.py

本系列文章的 GitHub 地址: tarvos21/80algorithms

欢迎讨论,提 issuse 和 pull request,共同学习。

代开银行存款证明公司安阳银行定期存单供应商常德出国留学资金证明服务商牡丹江代开银行存款证明鞍山存款证明定做眉山定期存单定制自贡企业资金证明打印定西企业资信证明哪家专业绥化存款证明代开徐州代做出国留学存款证明枣庄本地定期存单日喀则出国留学存款证明代开邯郸订做银行存款证明雅安查询留学存款证明濮阳定做银行定期存单长治本地银行定期存单营口出国留学资金证明查询襄阳银行存款证明代开肇庆代办资金证明海口出国留学存款证明用途湘潭企业资金证明用途昭通企业资信证明多少钱沈阳定制出国留学资金证明安庆查询留学存款证明周口打企业资信证明河源出国留学存款证明公司唐山办理银行存款证明信阳出国留学存款证明查询衡水出国留学存款证明抚顺企业资金证明价格连云港开资信证明香港通过《维护国家安全条例》两大学生合买彩票中奖一人不认账让美丽中国“从细节出发”19岁小伙救下5人后溺亡 多方发声汪小菲曝离婚始末卫健委通报少年有偿捐血浆16次猝死单亲妈妈陷入热恋 14岁儿子报警雅江山火三名扑火人员牺牲系谣言手机成瘾是影响睡眠质量重要因素男子被猫抓伤后确诊“猫抓病”中国拥有亿元资产的家庭达13.3万户高校汽车撞人致3死16伤 司机系学生315晚会后胖东来又人满为患了男孩8年未见母亲被告知被遗忘张家界的山上“长”满了韩国人?倪萍分享减重40斤方法许家印被限制高消费网友洛杉矶偶遇贾玲何赛飞追着代拍打小米汽车超级工厂正式揭幕男子被流浪猫绊倒 投喂者赔24万沉迷短剧的人就像掉进了杀猪盘特朗普无法缴纳4.54亿美元罚金周杰伦一审败诉网易杨倩无缘巴黎奥运专访95后高颜值猪保姆德国打算提及普京时仅用姓名西双版纳热带植物园回应蜉蝣大爆发七年后宇文玥被薅头发捞上岸房客欠租失踪 房东直发愁“重生之我在北大当嫡校长”校方回应护栏损坏小学生课间坠楼当地回应沈阳致3死车祸车主疑毒驾事业单位女子向同事水杯投不明物质路边卖淀粉肠阿姨主动出示声明书黑马情侣提车了奥巴马现身唐宁街 黑色着装引猜测老人退休金被冒领16年 金额超20万张立群任西安交通大学校长王树国卸任西安交大校长 师生送别西藏招商引资投资者子女可当地高考胖东来员工每周单休无小长假兔狲“狲大娘”因病死亡外国人感慨凌晨的中国很安全恒大被罚41.75亿到底怎么缴考生莫言也上北大硕士复试名单了专家建议不必谈骨泥色变“开封王婆”爆火:促成四五十对测试车高速逃费 小米:已补缴天水麻辣烫把捣辣椒大爷累坏了

代开银行存款证明公司 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化