gpt4 book ai didi

java - 优先队列与链表java

转载 作者:塔克拉玛干 更新时间:2023-11-01 21:53:34 25 4
gpt4 key购买 nike

我正在解决 BFS 问题。我使用了 PriorityQueue 但我得到了错误的答案,然后我使用了 LinkedList,我得到了正确的答案。我找不到它们之间的区别。这是两个代码。为什么两个答案不同?

Code1:    
LinkedList q=new LinkedList();
q.add(src);
dist[src]=0;
visited[src]=1;
while(!q.isEmpty()){
u=(int)(Integer) q.remove(0);
for (int k = 0; k < n; k++) {
if(a[u][k]==1 && visited[k]==0)
{
dist[k]=dist[u]+1;
q.add(k);
visited[k]=1;
}
}
}

Code 2:
PriorityQueue<Integer> q= new PriorityQueue<>();
q.add(src);
dist[src]=0;
visited[src]=1;
while(!q.isEmpty()){
u=q.remove();
for (int k = 0; k < n; k++) {
if(a[u][k]==1 && visited[k]==0)
{
dist[k]=dist[u]+1;
q.add(k);
visited[k]=1;
}
}
}

另外,当我使用邻接列表而不是邻接矩阵时,优先队列实现给出了正确的答案。

最佳答案

作为documentation说:

An unbounded priority queue based on a priority heap. The elements of the priority queue are ordered according to their natural ordering, or by a Comparator provided at queue construction time, depending on which constructor is used.

LinkedList 保留插入顺序,PriorityQueue 不保留。所以你的迭代顺序改变了,这使得你的实现使用 PriorityQueue 而不是 BFS。

关于java - 优先队列与链表java,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40175252/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com