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