版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/jiangshangchunjiezi/article/details/91377077
DFS(Depth First Search)深度优先搜索是从起始顶点开始,递归访问其所有邻近节点,比如A节点是其第一个邻近节点,而B节点又是A的一个邻近节点,则DFS访问A节点后再访问B节点,如果B节点有未访问的邻近节点的话将继续访问其邻近节点,否则继续访问A的未访问邻近节点,当所有从A节点出去的路径都访问完之后,继续递归访问除A以外未被访问的邻近节点。因为是递归过程,所以我们用过程图看一下也许会更直观一些。
// 顶点数
private int number = 6;
// 记录顶点是否被访问
private boolean[] flag;
// 顶点
private String[] vertexs = { "u", "v", "w", "x", "y", "z" };
// 边
private int[][] edges = {
// {u, v, w, x, y, z}
{ 0, 1, 0, 1, 0, 0 },
{ 0, 0, 0, 0, 1,0},
{ 0, 0, 0, 0, 1,1 },
{ 0, 1, 0, 0, 0,0 },
{ 0, 0, 0, 1, 0,0 },
{ 1, 0, 0, 0, 0,1},
};
// 图的深度遍历操作(递归)
void DFSTraverse() {
flag = new boolean[number];
for (int i = 0; i < number; i++) {
if (flag[i] == false) {// 当前顶点没有被访问
DFS(i);
}
}
}
// 图的深度优先递归算法
void DFS(int i) {
flag[i] = true;// 第i个顶点被访问
System.out.print(vertexs[i] + " ");
for (int j = 0; j < number; j++) //要访问这个节点下所有边
{ //没访问过,并且有边
if (flag[j] == false && edges[i][j] == 1)
{
DFS(j);//体现深度优先
}
}
}