深度优先遍历,就是一条路,走到底,然后再走下一个岔路。
下面代码就主要使用递归来进行,当然也可以借助栈来实现。
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');//使用深度优先遍历}
}
执行结果: