2024.3.26
题目来源
我的题解
方法一 Dijkstra算法求最短路径
图使用邻接表存储,添加边只需要更新邻接表就行。
求两个节点的路径最小代价使用dijkstra算法来实现
时间复杂度:
- Graph 类初始化时,时间复杂度为 O(m),其中 mmm 表示给定的 edges 数组的长度。
- 调用 addEdge时,此时直接在邻接边中添加一条边即可,时间复杂度为 O(1) 。
- 调用 shortestPath 时,需要的时间复杂度为 O((m+k)log(m+k)),其中 m 表示给定的 edges 数组的长度,k 表示调用 addEdge的次数。使用优先队列的 「Dijkstra 算法」的时间度与图中边的数量关系有关,需要的时间即为O((m+k)log(m+k))。
空间复杂度:O(m+n+k)。n表示给定的节点数。
class Graph {
List<Integer>[] g;
int N=101;
public Graph(int n, int[][] edges) {
g=createGraph(n,edges);
}
private List<Integer>[] createGraph(int n,int[][] edges){
List<Integer>[] g=new ArrayList[N];
for(int i=0;i<N;i++)
g[i]=new ArrayList<>();
for(int[] t:edges){
int from = t[0];
int to = t[1];
int w = t[2];
g[from].add(to);
g[from].add(w);

最低0.47元/天 解锁文章
8万+

被折叠的 条评论
为什么被折叠?



