我在解决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;
}
}
}
Run Code Online (Sandbox Code Playgroud)
此外,当我使用Adjacency List而不是Adjacency矩阵时,Priority Queue实现给出了正确的ans.