采用邻接表的bfs搜索Java代码
时间: 2023-09-14 12:12:20 浏览: 90
以下是采用邻接表的 BFS 搜索 Java 代码示例:
```java
import java.util.*;
public class BFS {
private int V; // 顶点数量
private LinkedList<Integer> adj[]; // 邻接表
// 初始化图
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];
// 创建队列用于 BFS
LinkedList<Integer> queue = new LinkedList<Integer>();
// 标记当前节点为访问过并加入队列
visited[s]=true;
queue.add(s);
while (queue.size() != 0) {
// 取出队列头部节点并输出
s = queue.poll();
System.out.print(s + " ");
// 获取当前节点的所有邻居节点
Iterator<Integer> i = adj[s].listIterator();
while (i.hasNext()) {
int n = i.next();
// 如果邻居节点未被访问过,则标记为访问过并加入队列
if (!visited[n]) {
visited[n] = true;
queue.add(n);
}
}
}
}
public static void main(String args[]) {
BFS g = new BFS(4);
g.addEdge(0, 1);
g.addEdge(0, 2);
g.addEdge(1, 2);
g.addEdge(2, 0);
g.addEdge(2, 3);
g.addEdge(3, 3);
System.out.println("BFS Traversal starting from vertex 2:");
g.BFS(2);
}
}
```
在上面的代码中,我们使用 `LinkedList` 来构建邻接表,用于存储图的结构。`addEdge` 方法被用来添加边到邻接表中。在 `BFS` 方法中,我们使用一个 `visited` 数组来标记每个顶点是否已被访问。我们还使用 `LinkedList` 来创建一个队列,用于 BFS。我们从给定的起始节点开始遍历,标记其为已访问并加入队列。然后,我们从队列中取出头部节点并打印它,接下来我们将其所有邻居节点加入队列。我们重复这个过程,直到队列为空。
阅读全文