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
相关产品推荐
相关产品推荐

