开发者社区> 问答> 正文

java中的优先队列PriorityQueue不再维护最小优先是怎么回事

用最小优先队列实现Dijkstra算法出现PriorityQueue不再维护最小优先,从队列中弹出一个结点后,队列中其余结点顺序未发生改变,导致第一个元素不是最小值

展开
收起
蛮大人123 2016-06-07 16:23:02 2413 0
1 条回答
写回答
取消 提交回答
  • 我说我不帅他们就打我,还说我虚伪
    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;
    }
    2019-07-17 19:30:26
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
Spring Cloud Alibaba - 重新定义 Java Cloud-Native 立即下载
The Reactive Cloud Native Arch 立即下载
JAVA开发手册1.5.0 立即下载