在使用BFS和DFS遍历图的时候,一般都会维护一个set或者visit数组,标记被访问过的节点,在遍历时需要判断是否被访问过
一、DFS(深度优先遍历)
DFS采用递归和栈,从起点顶点开始,递归访问其所有邻近节点。
Step1:下图 DFS(1) 访问节点1,Visited标注为T,以1为顶点,准备访问1的邻近节点0
Step2:下图 DFS(0) 访问节点0,Visited标注为T,以0为顶点,遍历0的邻近节点3,3也标注为T,准备访问3的邻近节点7
Step3:下图 DFS(7) 访问节点7,Visited标注为T,以7为顶点,准备访问7的邻近节点5
Step4:下图 DFS(5) 访问节点5,Visited标注为T,以5为顶点,准备访问5的邻近节点3,但是发现3标注为T(已经被访问过),再看5是否有其它邻近节点,如果有,继续访问,如果没有,返回上一级。这里返回上一级节点7
Step5:返回至节点7
Step6:同理以7为顶点,看7是否有其它邻近节点,如果有,继续访问,如果没有,返回上一级。这里返回上一级节点3
Step7:同理以3为顶点,看3是否有其它邻近节点,如果有,继续访问,如果没有,返回上一级。这里返回上一级节点0
Step8:同理以0为顶点,如果有邻近节点,继续访问,如果没有,返回上一级。这里返回上一级节点(最初的顶点)1
Step9:同理以1为顶点,看1是否有其它邻近节点,如果有,继续访问,如果没有,返回上一级,这里继续访问1的下个邻近节点2