0.深度优先遍历
图的遍历:就是依次访问所有的结点,且不能重复访问某个结点,且要避免死循环,所以应该把访问过的结点加上标记。
1.邻接矩阵深度优先遍历
所以上图中,以结点的右手原则遍历得到以下结果:
但是还没有访问到所有的结点,所以现在应该原路返回
如果遇到还没有访问过的结点,则继续访问,比如I结点:
在邻接矩阵实现深度优先遍历
其邻接矩阵为:
邻接矩阵深度优先遍历代码实现思路:
- 将图的顶点和边信息输入到图结构中;
- 创建一个visited数组,用来标识顶点是否已经被遍历过了;
- 初始化visited数组,将数组中元素置为false;
- 选择顶点开始遍历;【注意非连通图的情况】
- 进入递归;打印i对应的顶点信息,并将该顶点标识为已经遍历
- 循环遍历边表,判断当前arc[i][j]是否等于1,并且当前该顶点没有被遍历过,则继续递归DFS。
代码实现
1.先构建邻接矩阵结构
#define OK 1
2. 构建一个邻接矩阵
构建一个邻接矩阵*/
3.DFS遍历
/*4.2 DFS遍历*/
使用并打印:
printf
2.邻接表深度优先遍历
用邻接表来存储上面的图:
从A开始遍历上图:
最后得到的结果为:AFGHEDICB
邻接表深度优先遍历代码实现思路:
- 利用邻接矩阵将信息存储到邻接表中
- 创建一个visited数组,用来标识顶点是否已经被遍历过了;
- 初始化visited数组,将数组中元素置为false;
- 选择顶点开始遍历;【注意非连通图的情况】
- 进入递归;打印i对应的顶点信息,并将该顶点标识为已经遍历
- 循环遍历边表,判断当前arc[i][j]是否等于1,并且当前该顶点没有被遍历过,则继续递归DFS。
代码实现:
0.构建数据结构
#define OK 1
1.构建一个邻接矩阵
void
2.利用邻接矩阵构建邻接表
/*利用邻接矩阵构建邻接表*/
3.邻接表的深度优先递归算法
Boolean
使用并打印
printf
3.广度优先遍历
广度优先遍历和树的层序遍历类似。
上图经过变形
特点:
- 把根节点放到队列的末尾;
- 每次从队列的头部取出一个元素,查看这个元素所有的下一级元素,把它们方法队列的末尾,并把这个元素记为下一级元素的前驱;
- 找到所要找到元素的结束程序;
- 如果遍历整个树还没有找到,结束遍历。
用邻接矩阵进行广度优先遍历
0.邻接矩阵的数据结构
#define OK 1
1.构建一个邻接矩阵
/*构建一个邻接矩阵*/
2.需要用到的队列结构与相关功能函数
/* 循环队列的顺序存储结构 */
3.邻接矩阵广度优先遍历
/*邻接矩阵广度优先遍历-代码实现*/
使用并打印
printf
用邻接表进行广度优先遍历
0.构建邻接表数据结构
#define OK 1
1.构建一个邻接矩阵
/*构建一个邻接矩阵*/
2.需要用到的队列结构与相关功能函数
/* 循环队列的顺序存储结构 */
3.邻接表广度优先遍历
/*邻接表广度优先遍历*/
使用并打印
printf