CSES - Junien hinnat

Annettuna on tiedot kaupunkien välisistä junayhteyksistä. Jokainen yhteys on kaksisuuntainen ja sillä on tietty hinta, joka on sama kumpaankin suuntaan.

Tehtäväsi on muodostaa hintataulukko, joka näyttää halvimman hinnan jokaisen kaupungin välillä käyttäen junayhteyksiä. Taulukon tulee muodostua sisäkkäisistä listoista, ja siinä tulee näkyä kaupunkien nimet ja hinnat. Kaupungit tulee järjestää aakkosjärjestykseen taulukossa. Jos mitään yhteyttä ei ole, taulukossa tulee näkyä hintana -1. Esimerkki taulukosta on alla olevassa tehtäväpohjassa.

Luokassa tulee olla seuraavat metodit:

  • add_city: lisää uuden kaupungin
  • add_train: lisää junayhteyden kahden kaupungin välille
  • find_prices: palauttaa hintataulukon

Voit olettaa, että ennen metodin add_train kutsumista molemmat kaupungit on lisätty metodilla add_city.

Toteuta tiedostoon trainprices.py luokka TrainPrices, joka toimii seuraavan esimerkin mukaisesti.

class TrainPrices:
    def __init__(self):
        # TODO

    def add_city(self, name):
        # TODO

    def add_train(self, city1, city2, price):
        # TODO

    def find_prices(self):
        # TODO

if __name__ == "__main__":
    t = TrainPrices()

    t.add_city("Helsinki")
    t.add_city("Turku")
    t.add_city("Tampere")
    t.add_city("Oulu")

    t.add_train("Helsinki", "Tampere", 20)
    t.add_train("Helsinki", "Turku", 10)
    t.add_train("Tampere", "Turku", 50)

    print(t.find_prices())

    # metodin haluttu tulos:
    # [[None,       'Helsinki', 'Oulu', 'Tampere', 'Turku'],
    #  ['Helsinki', 0,          -1,     20,        10],
    #  ['Oulu',     -1,         0,      -1,        -1],
    #  ['Tampere',  20,         -1,     0,         30],
    #  ['Turku',    10,         -1,     30,        0]]