图的遍历是指从图中某一顶点出发,访遍图中其余顶点,且使每一个顶点仅被访问一次。
一、深度优先遍历(Depth First Search)
假设给定图G的初态是所有顶点均未曾访问过。在G中任选一顶点v为初始出发点(源点),则深度优先遍历可定义如下:首先访问出发点v,并将其标记为已访问过;然后依次从v出发搜索v的每个邻接点w。若w未曾访问过,则以w为新的出发点继续进行深度优先遍历,直至图中所有和源点v有路径相通的顶点(亦称为从源点可达的顶点)均已被访问为止。若此时图中仍有未访问的顶点,则另选一个尚未访问的顶点作为新的源点重复上述过程,直至图中所有顶点均已被访问为止。
深度优先遍历是一个递归的过程,类似于树的前序遍历,它的策略是尽可能的对纵深方向进行搜索。
有向网图邻接矩阵DPS代码示例:
//邻接矩阵DFS算法
private static void DFS(AdjacencyMatrix.Matrix matrix, int i){
int j;
visited[i] = true;
System.out.print(matrix.getVexs()[i]);
for (j = 0; j < matrix.getVerNum(); j++){
if(matrix.getArc()[i][j] > 0 && ! visited[j]&&matrix.getArc()[i][j] != 65535 )
DFS(matrix, j);
}
}
//邻接矩阵深度遍历操作
private static void DFSTraverse(){
adjacencyMatrix.CreateMGraph();