Zadanie:
Napisz program,
który znajdzie najkrótsze [najmniej kosztowne] przejście w labiryncie z punktu
początkowego do końcowego. Mapa przedstawiona jest za pomocą znaków, gdzie:
0 – pozycja
początkowa [koszt wejścia to 1]
1 – cel [koszt wejścia to 1]
‘_‘ – puste pole [koszt wejścia to 1]
. – trudny teren [koszt wejścia to 2]
X – pole niedostępne
Podróż
zaczyna się z kosztem = 0, z pola ‘0’ (ale wejście na to pole kosztuje 1 –
patrz przykład).
Pola 0 i 1
zawsze występują na mapie w jednym egzemplarzu.
Poruszanie
się poza mapą jest niedozwolone.
Wejście:
Dwie liczby w, h oznaczające szerokość i wysokość mapy. Następnie
h ciągów znaków o długości w reprezentujące kolejne wiersze mapy.
Wyjście:
liczba całkowitoliczbowa reprezentująca najmniejszy koszt wymagany do
osiągnięcia celu. Jeśli nie istnieje poprawna droga, zwróć -1.
Przykład:
in:
5 3
0__X_
_.X__
_...1
out:
10
Wyjaśnienie:
Całkowity koszt to 10, ponieważ przejście przez czerwone pola (0, _ i 1)
kosztuje 1, a przez niebieskie (.) kosztuje 2. W sumie koszt najkrótszej drogi
do celu to 1 + 1
+ 1 + 2 + 2 + 2 + 1 = 10
//std::cin >>
c; gdzie c jest typu char wczyta pojedynczy znak
//do rozwiązania
zadania można wykorzytać funkcję rekurencyjną