深度优先遍历,就是一条路,走到底,然后再走下一个岔路。
下面代码就主要使用递归来进行,当然也可以借助栈来实现。
  private void traverse(char v, boolean[] visited) {
        int index = _getIndexOfV(v);//获取v顶点在vertexS字符数组中的下标
        
        if (visited[index] == true) {//如果访问过,就返回,避免重复访问,造成严重后果
            return;
        }
        //没有访问过,就直接打印这个顶点
        System.out.print(v);
        visited[index]=true;//记得一打印完,就标记一下
        //然后遍历当前index行,一旦找到第一个没有访问的顶点,就递归
        for (int i = 0; i < vertexS.length; i++) {
            if (matrix[index][i] != 0 && !visited[i]) {//有这个目标顶点,并且没有访问过,进来
                System.out.print(" -> ");
                traverse(vertexS[i], visited);//递归深度遍历
            }
        }
    }测试:
public class Test {
    public static void main(String[] args) {
        char[] array = {'A', 'B', 'C', 'D','E'};
        GrapByMatrix grap = new GrapByMatrix(array, false);
        grap.addEdge('A', 'B', 1);
        grap.addEdge('A', 'D', 1);
        grap.addEdge('B', 'C', 1);
        grap.addEdge('A', 'C', 1);
        grap.traverseByDepth('A');//使用深度优先遍历
    }
}
执行结果:



















