Saltar al contenido

Los menos trasbordos

Enunciado

Ulises se acaba de mudar y todavía no le agarra el modo al transporte de la ciudad. No le importa cuánto tarde ni cuánto camine: lo que quiere es hacer el menor número de tramos, porque en cada trasbordo se pierde. Un tramo es subirse en una parada y bajarse en otra que esté conectada directo con ella.

Escribe una función que reciba red, salida y llegada. red es un diccionario donde cada llave es el nombre de una parada y su valor es la lista de las paradas a las que se llega directo desde ahí. Las conexiones sirven en los dos sentidos y vienen anotadas de los dos lados: si "Lago" está en la lista de "Centro", "Centro" está en la lista de "Lago". Ninguna parada se repite en una misma lista, ninguna se conecta consigo misma, y toda parada que aparece en una lista también es una llave de red. Hay de 1 a 20 paradas y de 0 a 40 conexiones. salida y llegada son nombres de paradas de red.

Regresa un entero: el menor número de tramos para ir de salida a llegada. Si las dos son la misma parada, Ulises ya está donde quería: regresa 0. Si no hay manera de llegar, regresa -1.

Con {"Sur": ["Centro"], "Centro": ["Sur", "Lago"], "Lago": ["Centro"]}, ir de "Sur" a "Lago" son 2 tramos: Sur a Centro y Centro a Lago. De "Sur" a "Sur" son 0. Y en {"Norte": ["Poniente"], "Poniente": ["Norte"], "Faro": []} no hay forma de ir de "Norte" a "Faro": regresa -1.

Ejemplos

  • El ejemplo

    {"Sur": ["Centro"], "Centro": ["Sur", "Lago"], "Lago": ["Centro"]}, "Sur", "Lago" → 2

  • La misma parada

    {"Sur": ["Centro"], "Centro": ["Sur", "Lago"], "Lago": ["Centro"]}, "Sur", "Sur" → 0

  • Un solo tramo

    {"Sur": ["Centro"], "Centro": ["Sur", "Lago"], "Lago": ["Centro"]}, "Sur", "Centro" → 1

  • No hay manera de llegar

    {"Norte": ["Poniente"], "Poniente": ["Norte"], "Faro": []}, "Norte", "Faro" → -1

Además de estas, el reto tiene pruebas ocultas que se revelan al enviar tu solución.

Empiezas con esto

Python

def tramos(red, salida, llegada):
    pass

JavaScript

function tramos(red, salida, llegada) {
}
Resolver este reto

Se abre en el navegador, con el editor y las pruebas. Este reto es del plan completo; los de O(1) y O(log n) son gratis.

Más retos de O(n)

Ver todos los retos →