Sinulle annetaan etäisyystaulukko, joka ilmaisee kunkin kahden kaupungin välisen etäisyyden. Kaupungit on numeroitu .
Etäisyystaulukko voi näyttää vaikkapa seuraavalta: Tässä tapauksessa kaupungit ovat . Esimerkiksi kaupunkien ja välinen etäisyys on . Tämä etäisyys on taulukossa rivin sarakkeessa sekä rivin sarakkeessa .
Tehtäväsi on etsiä lyhin reitti, joka lähtee kaupungista , käy kaikissa muissa kaupungeissa ja palaa lopuksi takaisin kaupunkiin . Jos reittejä on useita, tulee valita reitti, joka siirtyy joka askeleella kaupunkiin, jonka numero on mahdollisimman pieni. Äskeisessä etäisyystaulukossa haluttu lyhin reitti on , jonka pituus on .
Toteuta tiedostoon visitall.py
funktio find_route
, jolle annetaan etäisyystaulukko listana listoja. Funktion tulee palauttaa parina lyhimmän reitin pituus sekä esimerkki tavasta muodostaa reitti.
Voit olettaa, että kaupunkien määrä etäisyystaulukossa on välillä . Funktion tulee toimia tehokkaasti kaikissa tällaisissa tapauksissa.
def find_route(distances): # TODO if __name__ == "__main__": distances = [[0, 2, 2, 1, 8], [2, 0, 9, 1, 2], [2, 9, 0, 8, 3], [1, 1, 8, 0, 3], [8, 2, 3, 3, 0]] length, route = find_route(distances) print(length) # 9 print(route) # [1, 3, 5, 2, 4, 1] distances = [[0, 7, 5, 9, 6, 3, 1, 3], [7, 0, 3, 2, 3, 3, 7, 8], [5, 3, 0, 4, 2, 7, 7, 1], [9, 2, 4, 0, 2, 3, 2, 4], [6, 3, 2, 2, 0, 9, 5, 9], [3, 3, 7, 3, 9, 0, 4, 5], [1, 7, 7, 2, 5, 4, 0, 7], [3, 8, 1, 4, 9, 5, 7, 0]] length, route = find_route(distances) print(length) # 18 print(route) # [1, 7, 4, 6, 2, 5, 3, 8, 1]