Busca do caminho mais curto em um grafo usando classes

PHP Hard classes

Tarefa «Busca do caminho mais curto em um grafo usando classes»

Implemente a classe Graph para representar um grafo direcionado ponderado. A classe deve conter os métodos addEdge(int $from, int $to, int $weight) para adicionar uma aresta e shortestPath(int $start, int $end) para encontrar o caminho mais curto do vértice $start até $end usando o algoritmo de Dijkstra. Se o caminho não existir, o método deve retornar -1. É garantido que os pesos das arestas são positivos, o número de vértices não excede 1000 e o número de arestas é de até 10000.

Formato de Entrada

Na primeira linha, separados por espaço, são informados N (número de vértices) e M (número de arestas). Nas M linhas seguintes, as arestas são informadas no formato: from to weight. Na última linha, são informados start e end.

Formato de Saída

Um número inteiro — o custo mínimo do caminho de start até end, ou -1, se o caminho não existir.

Exemplos

Exemplo 1

ENTRADA
10
SAÍDA
87

Exemplo 2

ENTRADA
3 2 1 2 5 2 3 10 1 3
SAÍDA
15

Exemplo 3

ENTRADA
1
SAÍDA
0

Exemplo 4

ENTRADA
2 1 1 2 7 2 1
SAÍDA
-1
main.php