采用邻接表的bfs算法Java代码
时间: 2023-12-21 14:06:48 浏览: 67
以下是采用邻接表的BFS算法Java代码示例:
```java
import java.util.LinkedList;
import java.util.Queue;
public class BFS {
private int V; // 结点数
private LinkedList<Integer>[] adj; // 邻接表
public BFS(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);
}
// BFS遍历
void bfs(int s) {
boolean[] visited = new boolean[V];
Queue<Integer> queue = new LinkedList<>();
visited[s] = true;
queue.add(s);
while (queue.size() != 0) {
s = queue.poll();
System.out.print(s + " ");
for (int n : adj[s]) {
if (!visited[n]) {
visited[n] = true;
queue.add(n);
}
}
}
}
public static void main(String[] args) {
BFS bfs = new BFS(4);
bfs.addEdge(0, 1);
bfs.addEdge(0, 2);
bfs.addEdge(1, 2);
bfs.addEdge(2, 0);
bfs.addEdge(2, 3);
bfs.addEdge(3, 3);
System.out.println("BFS遍历结果:");
bfs.bfs(2);
}
}
```
在上述代码中,首先定义了一个BFS类,包含结点数V和邻接表adj两个成员变量。在构造函数中,初始化邻接表adj。然后,定义了一个addEdge方法,用于添加边。最后,定义了一个bfs方法,用于进行BFS遍历。
在bfs方法中,首先定义了一个visited数组,用于记录结点是否被访问过。接着,定义了一个队列queue,将起始结点s加入队列中,并将visited[s]标记为已访问。然后,使用while循环遍历队列中的结点,对于每个结点,将其输出,并将其未访问的邻居加入队列中。最后,当队列为空时,BFS遍历结束。
在main方法中,创建一个BFS对象,并添加边。然后,调用bfs方法进行BFS遍历,输出遍历结果。
阅读全文