什么是图片?
该图的特征:
QIQIAO地图
图形抽象
问题:如何不反复穿过每座桥,最后返回起点?(任何起点)
Euler最终以图形的形式抽象了它。每行代表每个桥,a,b,c,d,代表起点
结论:出发点的桥梁数量无法返回起点。
图形的常用术语:
相邻矩阵的常见方式表示:相邻矩阵。
如图所示:
相邻矩阵的问题:
指示相邻表图的另一种方法是:相邻表。
如图所示:
相邻表的问题:
在实施过程中,相邻表用于表示侧面,并使用字典地图来存储相邻的表。
首先创建图形类图,添加基本属性,然后实现Graph类的常见方法:
如图所示:
创建一个数组对象顶点存储顶点;创建一个地图对象边缘存储边缘,其中键是顶点,值是存储密钥顶点的相邻顶点的数组。
代码:
将ToString方法添加到图形中,以相邻表的形式在图中实现顶点。
代码:
测试代码:
检测结果:
该人物的遍历思想:
遍历图的两种算法:
为了记录是否访问了顶点,使用三种颜色表示其状态
首先封装了初始化方法,以将图中的所有顶点初始化为白色,并且代码如下实现:
广度优先搜索广度优先级搜索算法的想法:
实施思想:
根据队列,您可以简单地实现广度优先级搜索算法:
代码:
详细过程:
指定的第一个顶点的第一个顶点的遍历过程是:
这样,元素在队列中为0,也就是说,所有顶点在停止之前变成黑色,并从队列中出来。目前,图中的顶点已经通过了所有人。
测试代码:
测试结果:['a','b','c','d','e','f','g','h','i']
可以看出,广度优先搜索的顺序并未反复穿越所有顶点。
深入优先搜索深度优先算法的想法:
实施思想:
基于递归实现深度优先搜索算法:定义DFS方法来调用递归方法dfsvisit,并为递归访问图中的每个顶点定义DFSVisit方法。
在DFS方法中:
在DFSVisit方法中:
代码:
详细过程:
在这里,我们主要解释代码中的步骤3:访问指定顶点的相邻顶点。
下图显示了遍历图中每个点的完整过程:
测试代码:
测试结果:['a','b','e','i','f','c','d','g','h']
原始:https://juejin.cn/post/7101924711667335199