java实现邻接表广度优先
时间: 2024-01-20 14:04:26 浏览: 73
以下是使用Java实现邻接表广度优先遍历的示例代码:
```java
import java.util.LinkedList;
import java.util.Queue;
class Graph {
private int V; // 顶点的数量
private LinkedList<Integer> adj[]; // 邻接表
// 构造函数
Graph(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);
}
// 广度优先遍历
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 class Main {
public static void main(String args[]) {
Graph g = new Graph(9);
// 添加边
g.addEdge(6, 3);
g.addEdge(7, 3);
g.addEdge(8, 4);
g.addEdge(1, 2);
g.addEdge(2, 1);
g.addEdge(2, 5);
g.addEdge(2, 4);
g.addEdge(3, 1);
g.addEdge(3, 6);
g.addEdge(3, 7);
g.addEdge(4, 2);
g.addEdge(4, 8);
g.addEdge(5, 2);
g.addEdge(5, 8);
System.out.println("广度优先遍历:");
g.BFS(1);
}
}
```
输出结果为:V1->V2->V3->V5->V4->V6->V7->V8
阅读全文