You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JavaScript实现Dijkstra算法中edge变量的具体含义疑问

Dijkstra算法JavaScript代码疑问解答

核心结论

  • edge 是长度固定为2的数组,不是普通数值变量
  • edge[0] 对应与当前选中顶点mn相连的邻接顶点编号
  • edge[1] 对应顶点mn到该邻接顶点的边权值,你的猜测完全正确

逻辑依据

可以直接通过邻接表构建函数createGraph的实现验证:

function createGraph(V,E){
    // V - 图中顶点总数
    // E - 图中所有边的列表,单条边格式为[u,v,w]
    let adj_list = []; // 邻接表
    for(let i = 0 ; i < V ; i++){
        adj_list.push([]);
    }
    for(let i = 0 ; i < E.length ; i++){
        // 给顶点u的邻接列表插入 [邻接顶点v, 边权w]
        adj_list[E[i][0]].push([E[i][1],E[i][2]]);
        // 无向图需要双向插入,给顶点v的邻接列表插入 [邻接顶点u, 边权w]
        adj_list[E[i][1]].push([E[i][0],E[i][2]]);
    }
    return adj_list;
}

从代码可见最终生成的邻接表graph结构为:
graph[顶点编号] = [ [邻接顶点1, 边权1], [邻接顶点2, 边权2], ... ]
所以graph[mn][j]取到的就是当前顶点mn的第j条邻接边,也就是你赋值给edge的内容。

C++开发者适配说明

这个实现逻辑和你熟悉的C写法完全一致,只是语法表达有区别:
JS中没有内置pair类型,所以用长度为2的数组替代了C
中常用的pair<int, int>来存储邻接顶点和边权。等价的C邻接表定义为vector<vector<pair<int, int>>> graph,C中你会用graph[mn][j].first取邻接顶点,graph[mn][j].second取边权,JS中只是把first换成了下标0,second换成了下标1,核心逻辑没有任何差异。


内容的提问来源于stack exchange,提问作者codosopher

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 12:36:03