用Java 写 输入描述 顶点个数,边的条数,边的信息(每条边只输入一次)。 输出描述 从V0出发的广度遍历序列和深度遍历序列 样例输入 9 10 0 1 0 3 0 4 1 2 1 4 2 5 3 6 4 6 6 7 7 8 样例输出 ABDECGFHI ABCFEGHID
时间: 2023-07-16 11:12:06 浏览: 80
以下是 Java 实现代码:
```java
import java.util.*;
public class Main {
static int n, m;
static List<Integer>[] graph;
static boolean[] visited;
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
n = input.nextInt();
m = input.nextInt();
graph = new ArrayList[n];
visited = new boolean[n];
for (int i = 0; i < n; i++) {
graph[i] = new ArrayList<>();
}
for (int i = 0; i < m; i++) {
int u = input.nextInt();
int v = input.nextInt();
graph[u].add(v);
graph[v].add(u);
}
for (int i = 0; i < n; i++) {
Collections.sort(graph[i]);
}
dfs(0);
System.out.println();
bfs(0);
}
static void dfs(int u) {
visited[u] = true;
System.out.print((char) ('A' + u));
for (int v : graph[u]) {
if (!visited[v]) {
dfs(v);
}
}
}
static void bfs(int u) {
Queue<Integer> queue = new LinkedList<>();
queue.offer(u);
visited[u] = true;
while (!queue.isEmpty()) {
int cur = queue.poll();
System.out.print((char) ('A' + cur));
for (int v : graph[cur]) {
if (!visited[v]) {
visited[v] = true;
queue.offer(v);
}
}
}
}
}
```
这里使用了邻接表来存储图,DFS 和 BFS 的算法实现与模板相同。
阅读全文