Java代码广度优先搜索方法邻接表
时间: 2023-08-31 18:06:25 浏览: 88
以下是Java代码实现广度优先搜索方法邻接表:
```java
import java.util.*;
public class BFS {
// 邻接表
private Map<Integer, List<Integer>> adjacencyList = new HashMap<>();
// 添加边
public void addEdge(int u, int v) {
if (!adjacencyList.containsKey(u)) {
adjacencyList.put(u, new ArrayList<>());
}
if (!adjacencyList.containsKey(v)) {
adjacencyList.put(v, new ArrayList<>());
}
adjacencyList.get(u).add(v);
adjacencyList.get(v).add(u);
}
// 广度优先搜索
public void bfs(int start) {
Queue<Integer> queue = new LinkedList<>();
Map<Integer, Boolean> visited = new HashMap<>();
queue.offer(start);
visited.put(start, true);
while (!queue.isEmpty()) {
int u = queue.poll();
System.out.print(u + " ");
for (int v : adjacencyList.get(u)) {
if (!visited.containsKey(v)) {
queue.offer(v);
visited.put(v, true);
}
}
}
}
// 测试
public static void main(String[] args) {
BFS bfs = new BFS();
bfs.addEdge(0, 1);
bfs.addEdge(0, 2);
bfs.addEdge(1, 2);
bfs.addEdge(2, 3);
bfs.addEdge(3, 3);
System.out.print("BFS traversal starting from vertex 2: ");
bfs.bfs(2);
}
}
```
上述代码中,我们首先创建了一个邻接表 `adjacencyList`,用于保存每个节点的邻居节点列表。然后,我们实现了一个 `addEdge` 方法,用于添加边。接着,我们实现了一个 `bfs` 方法,用于进行广度优先搜索。在 `bfs` 方法中,我们使用一个队列 `queue` 和一个哈希表 `visited` 来实现广度优先搜索的过程。最后,我们在 `main` 方法中测试了我们的广度优先搜索方法。
阅读全文