Eu tenho um grande conjunto de redes lineares e gostaria de encontrar as duas extremidades de cada rede que estão mais distantes uma da outra ao longo da rede (na imagem abaixo, seria D a K). A solução de força bruta para esse problema é calcular o caminho mais curto ao longo da rede para cada par de origem, mas eu tenho centenas de redes com milhares de fins, portanto, calcular cada caminho possível é bastante pesado.
Existe uma maneira ideal de calcular isso sem usar a força bruta? Posso excluir alguns pontos com base em regras inteligentes?
EDIT: Adicionei uma ilustração do caminho mais longo mencionado por @Alex Tereshenkov para esclarecer minha pergunta. O caminho preto é o resultado do algoritmo de caminho mais longo (caminho mais longo sem repetir nenhum vértice). No meu caso, imagine que você entra na rede a partir de qualquer uma das letras e precisa dirigir para outra letra o mais rápido possível. Quais as duas letras mais difíceis de aderir?