设一个图采用邻接表存储结构,边结点类定义如下: public class Edge { public int adj; public Edge next;} 顶点结点类定义如下: public class Vex { public Object data; public Edge first;} 图的类定义为: public class Graph { private Vex[] vex, private boolean[]visited; private int vn; ... } 用Javo编写深度优先遍历函数dft(),其中的访问操作使用visit(v),v为顶点所存数据。
时间: 2023-12-14 07:39:07 浏览: 90
下面是使用邻接表存储结构来实现深度优先遍历的Java代码:
```
public class Graph {
private Vex[] vex;
private boolean[] visited;
private int vn;
// 深度优先遍历函数
public void dft(int v, Visit visit) {
visited = new boolean[vn];
dftHelper(v, visit);
}
// 辅助函数,递归遍历顶点v的邻接点
private void dftHelper(int v, Visit visit) {
visited[v] = true;
visit(vex[v].data);
Edge e = vex[v].first;
while (e != null) {
int adj = e.adj;
if (!visited[adj]) {
dftHelper(adj, visit);
}
e = e.next;
}
}
// 定义访问操作的接口
public interface Visit {
void visit(Object data);
}
}
public class Vex {
public Object data;
public Edge first;
}
public class Edge {
public int adj;
public Edge next;
}
```
在上面的代码中,我们定义了一个Graph类来表示图,其中包含了顶点数组vex、visited数组和顶点数vn。我们通过dft函数来进行深度优先遍历,visit操作则通过Visit接口来定义。在dftHelper函数中,我们先将当前顶点v标记为已访问,并对其进行visit操作。之后,我们遍历v的所有邻接点,如果某个邻接点adj还没有被访问过,则递归访问它。最后,我们需要在调用dft函数之前先创建visited数组,并将其中所有元素初始化为false,以确保所有顶点都能被遍历到。
阅读全文