[12] Labirynt*
Data zakończenia: 2024-10-24 16:00
Języki:
cpp
Limit czasu: 1.0 s
Limit pamięci: 150 MB
Cel
Zadanie alokację pamięci, na tablice oraz na poszukiwanie (rekurencję) w szerz.
Problem
Studenci stworzyli robota, który ma poruszać się po labiryncie. Robot ma skanować układ labiryntu i wyszukiwać drogę o minimalnej długości do wskazanego punktu. Robot może poruszać się w 4 kierunkach (do przodu, do tyłu, w prawo i w lewo) i ma się przemieścić od punktu A do punktu B. Podczas przemieszczania się robot nie może opuścić labiryntu. Zadanie polega na ustaleniu minimalnej długości drogi (jaką może przebyć robot) pomiędzy wskazanymi punktami A i B. (Oczywiście dróg o tej długości może być więcej niż jedna.)
Zadanie
Napisz program, który rozwiąże powyższy problem.
Dane wejściowe mają następującą postać
Jako dane wyjściowe program zwraca pojedynczą wartość równą długości drogi o minimalnej długości.
Jeśli nie isnieje droga z punktu A do punktu B, to powinna zostać wypisana wartość -1.
Przykład
Wejście
Wskazówki: w przypadku problemów z poprawnym wczytaniem danych sugeruję użyć metody getline() (wywołanej z obiektu strumienia cin) do odczytywania całych ''wierszy'' labiryntu.
Uwaga: należy podejrzewać, że kod rozwiązania tego zadania będzie istotnie dłuższy niż w przypadku pozostałych zadań, dlatego zalecane byłoby rozpoczęcie rozwiązywanie tego zadaniu dopiero po rozwiązaniu pozostałych zadań.
Zadanie alokację pamięci, na tablice oraz na poszukiwanie (rekurencję) w szerz.
Problem
Studenci stworzyli robota, który ma poruszać się po labiryncie. Robot ma skanować układ labiryntu i wyszukiwać drogę o minimalnej długości do wskazanego punktu. Robot może poruszać się w 4 kierunkach (do przodu, do tyłu, w prawo i w lewo) i ma się przemieścić od punktu A do punktu B. Podczas przemieszczania się robot nie może opuścić labiryntu. Zadanie polega na ustaleniu minimalnej długości drogi (jaką może przebyć robot) pomiędzy wskazanymi punktami A i B. (Oczywiście dróg o tej długości może być więcej niż jedna.)
Zadanie
Napisz program, który rozwiąże powyższy problem.
Dane wejściowe mają następującą postać
- Program na wejściu otrzymuje najpierw dwie wartości całkowitoliczbowe, kolejno n m, odpowiadające wymiarom labiryntu oznaczmy je kolejno.
- Następnie wczytuje po koleji n linijek o długości m, składających się ze znaków ' ' (spacja), '#' ("hash"), A i B, gdzie
- ' ' (spacja) oznacza korytarz (po którym robot możne się poruszać),
- '#' ("hash") oznacza ścianę,
- A oznacza punkt startowy,
- B oznacza punkt końcowy.
Jako dane wyjściowe program zwraca pojedynczą wartość równą długości drogi o minimalnej długości.
Jeśli nie isnieje droga z punktu A do punktu B, to powinna zostać wypisana wartość -1.
Przykład
Wejście
8 23 ### # # ############## # # # # # # # # # # # # # # # # # # # # # # # # # A# # # # # # # # # # # # # # # # # # # # # # # #B ## ## # ### # # # #Wyjście
32
Wskazówki: w przypadku problemów z poprawnym wczytaniem danych sugeruję użyć metody getline() (wywołanej z obiektu strumienia cin) do odczytywania całych ''wierszy'' labiryntu.
Uwaga: należy podejrzewać, że kod rozwiązania tego zadania będzie istotnie dłuższy niż w przypadku pozostałych zadań, dlatego zalecane byłoby rozpoczęcie rozwiązywanie tego zadaniu dopiero po rozwiązaniu pozostałych zadań.