优先级队列与链表java

vik*_*kkz 3 java algorithm graph graph-algorithm data-structures

我在解决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.

uoy*_*maz 10

正如文件所说:

基于优先级堆的无界优先级队列.优先级队列的元素根据其自然顺序排序,或者由队列构造时提供的比较器排序,具体取决于使用的构造函数.

LinkedList保留了插入顺序,而PriorityQueue则没有.因此,您的迭代顺序会发生变化,这会使您使用PriorityQueue的实现不是BFS.