#!/usr/bin/python3 import queue # Načteme první 3 čísla R, S, K # Načtu řádek ze vstupu, rozdělím ho podle mezer a hodnoty převedu na číslo R, S, K = map(int, input().split(" ")) # Nyní načtu mapu oblasti a najdu kde se nachází naše 2 města # Mapa oblasti bude 2D pole, vnější pole značí řádky, vnitřní sloupce mapa_oblasti = [] for x in range(R): mapa_oblasti.append([]) vstup = input() for (y, znak) in enumerate(vstup): if znak == 'X': xaverov = (x, y) elif znak == 'Y': yndyanapolis = (x, y) mapa_oblasti[x].append(znak) # Vytvořím si prázdnou mapu oblasti, do které budu ukládat ceny postavení železnice z X na aktuální místo # Prázdná mapa oblasti bude stejné 2D pole jako plná mapa oblastí ceny = [[0 for _ in range(S)] for _ in range(R)] # Směry, po kterých můžu vést železnici (nahoru, doleva, doprava, dolu) smery = [ (-1, 0), (0, -1), (0, 1), (1, 0)] # Vytvořím prioritní frontu a vložím do ní startovní políčko fronta = queue.PriorityQueue() fronta.put((0, xaverov[0], xaverov[1])) # Dokud jsou ve frontě políčka ke zkontrolování... while fronta.qsize() != 0: # Vytáhneme z fronty políčko a zjistíme vše potřebné policko = fronta.get() policko_X = policko[1] policko_Y = policko[2] aktualni_cena = ceny[policko_X][policko_Y] # Zkusíme všechny 4 sousedy aktuálního políčka for smer in smery: sousedni_X = policko_X + smer[0] sousedni_Y = policko_Y + smer[1] # Zkontroluji, jestli náhodou nedělám krok mimo mapu if (0 <= sousedni_X < R) and (0 <= sousedni_Y < S): cena_sousedni_policko = ceny[sousedni_X][sousedni_Y] # Spočítám cenu za kterou se můžu dostat z aktuálního políčka do sousedního políčka if mapa_oblasti[sousedni_X][sousedni_Y] == '.': nova_cena = aktualni_cena + 1 elif mapa_oblasti[sousedni_X][sousedni_Y] == 'A': nova_cena = aktualni_cena + K else: nova_cena = aktualni_cena # Pokud jsem políčko ještě nenavstívil nebo je nová cena menší, tak nastavím novou cenu a vložím souseda do fronty if cena_sousedni_policko == 0 or nova_cena < cena_sousedni_policko: ceny[sousedni_X][sousedni_Y] = nova_cena fronta.put((nova_cena, sousedni_X, sousedni_Y)) # Vypíšu výsledek print(ceny[yndyanapolis[0]][yndyanapolis[1]])