请将上面的代码转换成JAVA语言
时间: 2023-10-27 10:04:33 浏览: 92
以下是将深度优先搜索的C++代码转换成Java语言后的示例代码:
```java
import java.util.*;
public class DFS {
static List<Integer>[] adj; // 存储无向图的邻接表
static boolean[] visited; // 存储每个节点是否被访问
static Stack<Integer> st; // 存储深度优先搜索时的节点栈
// 深度优先搜索函数
static void dfs(int start) {
visited[start] = true; // 标记起点已被访问
st.push(start); // 将起点入栈
while (!st.empty()) { // 当栈不为空时,继续搜索
int cur = st.peek(); // 取出栈顶的节点
st.pop(); // 弹出栈顶节点
System.out.print(cur + " "); // 输出当前节点
for (Integer next : adj[cur]) { // 遍历当前节点的邻居节点
if (!visited[next]) { // 如果邻居节点未被访问
visited[next] = true; // 标记邻居节点已被访问
st.push(next); // 将邻居节点入栈
}
}
}
}
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int m = sc.nextInt();
int start = sc.nextInt();
adj = new ArrayList[n + 1]; // 初始化邻接表
for (int i = 1; i <= n; i++) {
adj[i] = new ArrayList<>();
}
visited = new boolean[n + 1]; // 初始化visited数组
st = new Stack<>(); // 初始化节点栈
for (int i = 0; i < m; i++) {
int u = sc.nextInt();
int v = sc.nextInt();
adj[u].add(v); // 将边加入邻接表
adj[v].add(u);
}
dfs(start); // 从起点开始深度优先搜索
}
}
```
该程序通过邻接表存储无向图,使用一个布尔数组 `visited` 记录每个节点是否被访问过,使用栈 `st` 存储深度优先搜索时的节点顺序。在 `dfs` 函数中,首先标记起点已被访问,并将其入栈。然后,当栈不为空时,取出栈顶的节点,输出该节点,并遍历其邻居节点,将未被访问过的邻居节点入栈。最终,整个无向图都会被遍历一遍。
阅读全文