Module: algoritmo de Dijkstra


Problem

8/14

Algoritmo de Dijkstra em O(M logN) conjunto c: Start (C++)

Theory Click to read/hide

Como o comportamento assintótico da implementação ingênua do algoritmo de Dijkstra é: \(O(n^2 + m)\), à medida que o número de vértices aumenta, a velocidade de trabalho torna-se insatisfatória.
 Várias estruturas de dados podem ser usadas para melhoria: Pilhas de Fibonacci, conjuntos set ou uma fila de prioridade priority_queue. 
Considere um exemplo com conjunto, como resultado, a assintótica final é: \(O(n log (m))\) , detalhes.

Problem

Você recebe um gráfico ponderado direcionado. Encontre a distância mais curta de um dado vértice para outro.
 
Entrada
A primeira linha contém três números: N, M, S e F (1≤ N≤ 100, 1≤ S, F≤ N), onde N – número de vértices do grafo, M – número de costelas,  S– vértice inicial e F – final. Nas próximas N linhas, insira N números cada, não excedendo 100, – matriz de adjacência de gráfico, onde -1 significa nenhuma aresta entre os vértices e qualquer número não negativo – a presença de uma aresta de determinado peso. Os zeros são escritos na diagonal principal da matriz.
 
Saída
É necessário exibir a distância desejada ou -1 se não houver caminho entre os vértices especificados.

Exemplos
# Entrada Saída
1 4 4 3 4
3 1 3
1 2 3
2 4 3
3 4 10
9