Olet n \times m -labyrintissa ruudussa X
, ja tehtäväsi on työntää ruudussa B
oleva laatikko ruutuun Y
. Jokainen ruutu on joko lattiaa (.
) tai seinää (#
), ja jokainen reunalla oleva ruutu on seinää.
Voit työntää laatikkoa kulkemalla sitä päin, jolloin siirryt laatikon ruutuun ja laatikko siirtyy askeleen kulkusuuntaan. Mikä on pienin mahdollinen määrä askelia työntää laatikko maaliruutuun?
Voit olettaa, että 1 \le n, m \le 20. Jos ratkaisua ei ole olemassa, palauta -1.
Python
Toteuta tiedostoon pushbox.py
funktio count
, joka antaa pienimmän askelten määrän.
def count(r): # TODO if __name__ == "__main__": r = ["########", "#......#", "#.#.Y#.#", "#.#B.#.#", "#..X.#.#", "#.#..#.#", "########"] print(count(r)) # 18
Java
Toteuta tiedostoon Pushbox.java
metodi count
, joka antaa pienimmän askelten määrän.
public class Pushbox { public int count(String[] r) { // TODO } public static void main(String[] args) { Pushbox p = new Pushbox(); String[] r = {"########", "#......#", "#.#.Y#.#", "#.#B.#.#", "#..X.#.#", "#.#..#.#", "########"}; System.out.println(p.count(r)); // 18 } }