图的bread first search(BFS)宽度优先搜索; deep first search(DFS);深度优先搜索
BFS的实现有两个关键的步骤:
1、节点的访问(通过队列实现)。
2、节点的搜索(通过flag 数组记录已访问的节点)。
BFS的遍历结果:1、2、3、4、5、6、7 或者 3、1、4、5、2、6、7或者5、3、4、6、7、1、2或者。。。。
选择节点的顺序不重要,重要的是对每个节点,选出所有与之相连的节点。
DFS通过递归来实现
DFS遍历的结果:1、2、4、3、5、6、7或者5、3、1、2、4、6、7或者。。。。
选择节点的顺序不重要,重要的是从选择的第一个节点开始,一直遍历到最后无后续相连节点的节点。然后递归遍历与第一个节点相连的后续节点(比如,选择第一节点为1,当遍历完节点1后,遍历节点2,接着4、3、5、6、7;又或者当选择第一节点为5时,遍历完节点5后,与节点5相连的第一个节点为3,然后依次是1、2、4、6、7.)。
代码中 图通过二维数组来表示。
代码如下:
#include <stdio.h>
#include <stdlib.h>
struct node {
int data;
struct node