Annettuna on n \times m -labyrintti, ja tehtäväsi on kulkea ruudusta A ruutuun B.
Tässä tehtävässä labyrintissa on kahdenlaisia seinäruutuja: labyrintin reunalla olevaa seinää merkitään # kuten ennenkin, mutta labyrintin sisällä olevaa seinää merkitään *. Voit rikkoa labyrintin sisällä olevaa seinää, jolloin pystyt kulkemaan vapaammin labyrintissa.
Mikä on pienin mahdollinen määrä seinäruutuja, jotka sinun täytyy rikkoa, jotta pääset maaliin? Voit olettaa, että 1 \le n, m \le 20.
Python
Toteuta tiedostoon breakwall.py funktio count, joka kertoo pienimmän mahdollisen määrän rikottavia seinäruutuja.
def count(r):
# TODO
if __name__ == "__main__":
r = ["########",
"#*A*...#",
"#.*****#",
"#.**.**#",
"#.*****#",
"#..*.B.#",
"########"]
print(count(r)) # 2
Java
Toteuta tiedostoon Breakwall.java metodi count, joka kertoo pienimmän mahdollisen määrän rikottavia seinäruutuja.
public class Breakwall {
public int count(String[] r) {
// TODO
}
public static void main(String[] args) {
Breakwall b = new Breakwall();
String[] r = {"########",
"#*A*...#",
"#.*****#",
"#.**.**#",
"#.*****#",
"#..*.B.#",
"########"};
System.out.println(b.count(r)); // 2
}
}
