java 邻接表 遍历图的每一条路径
时间: 2024-01-12 08:04:26 浏览: 79
邻接表无向图的Java语言实现完整
5星 · 资源好评率100%
使用深度优先搜索算法可以遍历图的每一条路径。具体步骤如下:
1. 创建一个布尔型数组visited,用于记录每个顶点是否被访问过,初始值为false。
2. 从图中的任意一个顶点开始遍历,将该顶点标记为已访问,并输出该顶点。
3. 遍历该顶点的邻接表,对于每个未访问过的邻接顶点,递归调用深度优先搜索算法。
4. 如果所有邻接顶点都已被访问过,则回溯到上一个顶点,继续遍历其它未访问过的邻接顶点。
5. 直到所有顶点都被访问过为止。
以下是Java代码示例:
```java
public class Graph {
private int V;
private LinkedList<Integer>[] adj;
public Graph(int V) {
this.V = V;
adj = new LinkedList[V];
for (int i = 0; i < V; i++) {
adj[i] = new LinkedList<>();
}
}
public void addEdge(int v, int w) {
adj[v].add(w);
}
public void DFS(int v, boolean[] visited, String path) {
visited[v] = true;
path += v + " ";
if (isAllVisited(visited)) {
System.out.println(path);
}
Iterator<Integer> it = adj[v].listIterator();
while (it.hasNext()) {
int n = it.next();
if (!visited[n]) {
DFS(n, visited, path);
}
}
visited[v] = false;
}
public void traverse() {
boolean[] visited = new boolean[V];
for (int i = 0; i < V; i++) {
DFS(i, visited, "");
}
}
private boolean isAllVisited(boolean[] visited) {
for (int i = 0; i < visited.length; i++) {
if (!visited[i]) {
return false;
}
}
return true;
}
}
```
在上面的代码中,DFS方法用于深度优先遍历图,isAllVisited方法用于判断所有顶点是否都被访问过,traverse方法用于遍历图的所有路径。
阅读全文