用最小优先队列实现Dijkstra算法出现PriorityQueue不再维护最小优先,从队列中弹出一个结点后,队列中其余结点顺序未发生改变,导致第一个元素不是最小值
public static int[] dijkstra(Node[] node, Node n, int[][] e) {
//n为起始点
n.d = 0;
PriorityQueue pn = new PriorityQueue();
for (int i = 0; i < node.length; i++) {
if (node[i] == null) {
break;
}
pn.add(node[i]);
}
int[] s = new int[pn.size()];
while (pn.size() != 0) {
Node u = pn.peek();
Node v = u.next;
while (v != null) {
relax(u, node[v.id], e[u.id][v.id]);
s[v.id] = node[v.id].d;
v = v.next;
}
pn.poll();
}
return s;
}
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。