用java写一个广度优先遍历
时间: 2024-05-29 18:04:33 浏览: 86
以下是使用Java编写的广度优先遍历算法示例代码:
```java
import java.util.LinkedList;
import java.util.Queue;
public class BreadthFirstSearch {
private int[][] graph; // 用邻接矩阵表示图
private boolean[] visited; // 记录节点是否被访问过
public BreadthFirstSearch(int[][] graph) {
this.graph = graph;
visited = new boolean[graph.length];
}
public void bfs(int start) {
Queue<Integer> queue = new LinkedList<>(); // 用队列来实现广度优先遍历
queue.offer(start); // 将起始节点加入队列
visited[start] = true; // 标记起始节点已经被访问过了
while (!queue.isEmpty()) {
int current = queue.poll(); // 取出队列头部的节点
System.out.print(current + " "); // 访问该节点
// 将当前节点的所有未访问过的邻居加入队列
for (int i = 0; i < graph[current].length; i++) {
if (graph[current][i] == 1 && !visited[i]) {
queue.offer(i);
visited[i] = true;
}
}
}
}
public static void main(String[] args) {
int[][] graph = {
{0, 1, 0, 1, 0},
{1, 0, 1, 1, 0},
{0, 1, 0, 0, 1},
{1, 1, 0, 0, 1},
{0, 0, 1, 1, 0}
};
BreadthFirstSearch bfs = new BreadthFirstSearch(graph);
bfs.bfs(0); // 从节点0开始进行广度优先遍历
}
}
```
该代码实现了从节点0开始进行广度优先遍历的功能,其中邻接矩阵graph表示了一个无向图,0表示两个节点之间没有边,1表示有边。在bfs方法中,先将起始节点加入队列并标记为已访问,然后循环取出队列头部的节点,访问该节点,并将其所有未访问过的邻居加入队列,直到队列为空。最终输出的结果是0 1 3 2 4,表示广度优先遍历的访问顺序。
阅读全文