图
深度优先搜索(DFS)
深度优先搜索类似于树的前序遍历,而不一样的地方是图的深度优先搜索遍历在遍历的过程中可能会因为图本身的结构原因而反复地访问到一个顶点。这个是不被允许的,所以我们需要对应的解决的方法来针对这个问题。下面是算法实现的主要实现思路:
实现深度优先搜索算法我们一般有两种思路:一种是通过递归的方法,一种是借助栈来实现。以下讨论的是借助栈来实现的思路
- 1、首先,由于我们讨论的图结构是用邻接矩阵进行存储的,我们就以邻接矩阵来进行讨论
- 2、准备工作,因为我们需要避免在遍历的过程中对一个顶点访问超过1次,所以我们需要一个用来标记顶点是否已经访问过的数组visited,只有当还没有访问的时候才进行访问。因为我们需要借助栈的先进后出的特点来进行辅助实现深度优先搜索遍历,所以我们创建一个栈s。
- 2、输入一个起点v, 以此当做是深度优先搜索遍历的起点,然后我们通过locateVex函数(输入顶点v,返回顶点v在顶点表中的下标)找到v的下标index,因为此时顶点v已经访问完了,所以我们需要将visited[index]进行标记,表示已经访问过,并且加入栈中,然后到图的邻接矩阵的第index行进行依次访问该点到其他点的权值,如果对应的权值不为默认值并且visited数组表示这个顶点还没有被访问,那么就将这个点加入栈s