Какой тип данных использовать в качестве очереди в алгоритме Дейкстры?

Я пытаюсь реализовать алгоритм Дейкстры на Java (самообучение). Я использую псевдокод, предоставленный Википедией ( ссылка ). Теперь, ближе к концу алгоритма, я должен уменьшить ключ v в Q; . Думаю, мне следовало реализовать Q с помощью BinaryHeap или что-то в этом роде? Какой (встроенный) тип данных использовать здесь?

private void dijkstra(int source) {
        int[] dist = new int[this.adjacencyMatrix.length];
        int[] previous = new int[this.adjacencyMatrix.length];
        Queue q = new LinkedList();

        for (int i = 0; i < this.adjacencyMatrix.length; i++) {
            dist[i] = this.INFINITY;
            previous[i] = this.UNDEFINED;
            q.add(i);
        }

        dist[source] = 0;

        while(!q.isEmpty()) {
            // get node with smallest dist;
            int u = 0;
            for(int i = 0; i < this.adjacencyMatrix.length; i++) {
                if(dist[i] < dist[u])
                    u = i;
            }

            // break if dist == INFINITY
            if(dist[u] == this.INFINITY) break;

            // remove u from q
            q.remove(u);

            for(int i = 0; i < this.adjacencyMatrix.length; i++) {
                if(this.adjacencyMatrix[u][i] == 1) {
                    // in a unweighted graph, this.adjacencyMatrix[u][i] always == 1;
                    int alt = dist[u] + this.adjacencyMatrix[u][i]; 
                    if(alt < dist[i]) {
                        dist[i] = alt;
                        previous[i] = u;

                        // here's where I should "decrease the key"
                    }
                }
            }
        }
    }

18
задан Dänu 7 June 2011 в 14:56
поделиться