Los menos trasbordos
- O(n) · Media
- Plan completo
- Python
- JavaScript
- diccionarios
- conjuntos
- ciclos
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):
passJavaScript
function tramos(red, salida, llegada) {
}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.