#!/usr/bin/python3 # Hledání dosažitelných políček v bludišti # Bludiště se načítá ze souboru "bludiste.in": # "." značí volná políčka # "#" jsou zdi # "0" je počáteční políčko # "o" zapíšeme na všechna dosažitelná políčka from collections import deque class Bludiste: def __init__(self): self.bludiste = [] self.radku = 0 self.sloupcu = 0 def nacti(self, soubor): with open(soubor) as f: for radek in f: self.bludiste.append(list(radek.strip())) self.radku = len(self.bludiste) self.sloupcu = len(self.bludiste[0]) def vypis(self): for r in self.bludiste: print("".join(r)) def najdi_start(self): for r in range(self.radku): for s in range(self.sloupcu): if self.bludiste[r][s] == '0': return r, s raise RuntimeError("Jsem ztracen: bludiště nemá začátek!") def hledani_do_sirky(self, r, s): fronta = deque() fronta.append((r, s)) self.bludiste[r][s] = 'o' def soused(rr, ss): if (0 <= rr < self.radku and 0 <= ss < self.sloupcu and self.bludiste[rr][ss] == '.'): self.bludiste[rr][ss] = 'o' fronta.append((rr, ss)) while fronta: r, s = fronta.popleft() soused(r-1, s) soused(r+1, s) soused(r, s-1) soused(r, s+1) b = Bludiste() b.nacti("bludiste.in") r0, s0 = b.najdi_start() b.hledani_do_sirky(r0, s0) b.vypis()