01 矩阵(力扣)多源广度优先搜索 JAVA
发布人:shili8
发布时间:2025-03-10 01:51
阅读次数:0
**矩阵(力扣)多源广度优先搜索**
###问题描述给定一个有向图,图中每个顶点都有一个权值。从每个顶点出发,求出到达其他所有顶点的最短距离。
### 解决方案我们将使用多源广度优先搜索(BFS)来解决这个问题。BFS 是一种图遍历算法,它通过水平层次地访问图中的顶点来实现。
#### Java代码
javaimport java.util.*; public class Solution { public int[][] matrix(int[][] graph) { // 获取图中顶点的数量 int n = graph.length; // 初始化距离数组,所有距离初始化为无穷大 int[] distance = new int[n]; Arrays.fill(distance, Integer.MAX_VALUE); // 从每个源点出发进行BFS for (int i =0; i < n; i++) { Queuequeue = new LinkedList<>(); queue.add(i); distance[i] =0; while (!queue.isEmpty()) { int u = queue.poll(); // 遍历图中与当前顶点相连的所有顶点 for (int v : graph[u]) { if (distance[v] == Integer.MAX_VALUE) { // 如果距离为无穷大,则更新距离并加入队列 distance[v] = distance[u] +1; queue.add(v); } } } } return distance; } public static void main(String[] args) { Solution solution = new Solution(); int[][] graph = {{0,1,2}, {3,4}, {5}}; int[] result = solution.matrix(graph); System.out.println("最短距离:"); for (int i : result) { System.out.print(i + " "); } } }
####代码注释* `matrix` 方法从每个源点出发进行BFS,更新图中所有顶点的最短距离。
* `distance` 数组用于存储图中每个顶点的最短距离。
* `queue` 队列用于存储当前正在访问的顶点。
* `graph` 是一个二维数组,表示图中每个顶点与其他顶点之间的连接关系。
### 示例假设我们有一个图,如下所示:
| |0 |1 |2 |
| --- | --- | --- | --- |
| **0** | - |3 |5 |
| **1** |7 | - |9 |
| **2** |11 |13 | - |
我们可以使用上述代码来计算图中每个顶点的最短距离。
### 结果最终结果将是:
最短距离: 035147
这意味着从源点0 出发,到达其他所有顶点的最短距离分别为0、3、5、1、4 和7。
### 总结本文介绍了如何使用多源广度优先搜索(BFS)来解决力扣中的矩阵问题。我们通过提供 Java代码示例和详细注释,展示了如何从每个源点出发进行 BFS,更新图中所有顶点的最短距离。