用 java 写一个 bfs 算法
时间: 2024-09-15 22:03:58 浏览: 40
Java实现BFS算法
BFS(广度优先搜索)算法是一种用于图的搜索算法,它以一种层次化的方式进行搜索,即首先访问起点,然后访问与起点距离为1的所有顶点,接着是距离为2的顶点,依此类推,直到找到目标顶点或者搜索完整个图。
以下是使用Java实现BFS算法的一个简单示例。在这个示例中,我们使用队列来存储每一层的顶点,以实现层次化搜索。
```java
import java.util.LinkedList;
import java.util.Queue;
import java.util.Arrays;
public class BFSExample {
private int V; // 图的顶点数
private LinkedList<Integer> adj[]; // 邻接表
// 构造函数
public BFSExample(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); // 将 w 添加到 v 的链表中
}
// 从给定源顶点开始进行BFS
void bfs(int s) {
// 所有顶点初始化为未访问
boolean visited[] = new boolean[V];
// 创建一个队列用于BFS
Queue<Integer> queue = new LinkedList<>();
// 将源顶点标记为已访问,并入队
visited[s] = true;
queue.add(s);
while (!queue.isEmpty()) {
// 出队一个顶点,并打印它
s = queue.poll();
System.out.print(s + " ");
// 获取所有相邻顶点
// 如果顶点 w 未被访问,则标记为已访问并入队
for (int i : adj[s]) {
if (!visited[i]) {
visited[i] = true;
queue.add(i);
}
}
}
}
public static void main(String args[]) {
BFSExample g = new BFSExample(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("从顶点 2 开始的BFS遍历:");
g.bfs(2);
}
}
```
这段代码首先定义了一个图类`BFSExample`,它包含了一个顶点列表,以及添加边和执行BFS遍历的方法。在`main`方法中,我们创建了一个图的实例,添加了边,并执行了从顶点2开始的BFS遍历。
阅读全文