用Java给我写一个深度优先遍历
时间: 2023-05-22 12:04:18 浏览: 97
很高兴回答这个问题,请看以下Java的深度优先遍历代码:
```
public class DFSGraph {
private int V; // 图的顶点数
private LinkedList<Integer>[] adj; // 相邻顶点的数组
public DFSGraph(int v) {
V = v;
adj = new LinkedList[v];
for (int i=0; i<v; ++i)
adj[i] = new LinkedList();
}
// 添加相邻的顶点
void addEdge(int v, int w) {
adj[v].add(w); // 添加 w 到 v 的相邻顶点列表中
}
// 使用递归来实现深度优先遍历
void DFSUtil(int v, boolean[] visited) {
visited[v] = true; // 标记当前顶点已访问
System.out.print(v+" "); // 输出当前顶点
Iterator<Integer> i = adj[v].listIterator();
while (i.hasNext()) {
int n = i.next();
if (!visited[n])
DFSUtil(n, visited);
}
}
// 对深度优先遍历进行封装
void DFS(int v) {
boolean[] visited = new boolean[V];
DFSUtil(v, visited);
}
public static void main(String[] args) {
DFSGraph g = new DFSGraph(4); // 创建一个有 4 个顶点的图
g.addEdge(0, 1); // 添加相邻的两个顶点
g.addEdge(0, 2);
g.addEdge(1, 2);
g.addEdge(2, 0);
g.addEdge(2, 3);
g.addEdge(3, 3);
System.out.println("从顶点 2 开始进行深度优先遍历:");
g.DFS(2); // 开始遍历,从顶点 2 开始
}
}
```
希望这个代码对您有帮助!
阅读全文