este fascinat de jocuri puzzle de tip , în care scopul este împingerea unor cutii la anumite destinații. Simțindu-se dornic de o provocare, el l-a rugat pe prietenul său să îi creeze un astfel de puzzle. Din păcate, a greșit implementarea, așa că, pe tot parcursul jocului, player-ul nu se poate îndepărta de marginea cutiei. realizează că puzzle-ul s-ar putea să fie prea greu pentru el, iar cum el trebuie să se pregătească pentru , vă roagă pe voi să găsiți o soluție.
Cerință
Se dă o matrice reprezentând puzzle-ul creat de . Acesta conține un player, o cutie de dimensiuni , o poziție unde trebuie să ajungă player-ul, și diverse obstacole. Așadar, fiecare celulă poate fi de următoarele tipuri:
- Un spațiu liber, prin care pot trece atât cutia, cât și player-ul;
- Un obstacol prin care poate trece cutia, dar nu player-ul;
- Un perete prin care nu pot trece nici cutia și nici player-ul;
- Un spațiu liber ocupat de player la început;
- Un spațiu liber ocupat de cutie la început;
- Un spațiu liber ce trebuie ocupat de player la final.
Într-un pas, player-ul se poate mișca în una din cele direcții cardinale. Dacă cutia ocupă această celulă, ea va fi împinsă în direcția corespunzătoare. Această mutare se poate realiza doar dacă la finalul ei player-ul și cutia ocupă poziții valide. Din cauza greșelii lui , atât la început, cât și la finalul fiecărei mutări, player-ul trebuie să se afle pe marginea cutiei (vezi pentru definiții formale).
Să se determine numărul minim de pași necesari pentru ca player-ul să ajungă la destinația sa finală.
Date de intrare
Pe prima linie a fișierului de intrare sokoban.in se găsesc numere întregi, , cu semnificația din enunț. Pe următoarele linii se găsesc câte caractere, care reprezintă descrierea matricii:
.- spațiu liber;w- obstacol prin care poate trece doar cutia;W- perete prin care nu poate trece nimic;P- poziția de început a player-ului;B- un spațiu ocupat de cutie la început;F- destinația finală a player-ului.
Date de ieșire
Pe singura linie a fișierului de ieșire sokoban.out se va afla un singur număr întreg, ce va reprezenta numărul minim de pași pentru ca player-ul să ajungă la destinație.
Restricții și precizări
- ;
- ;
- Din celula , player-ul se poate mișca în una din celulele , atât timp cât acestea se află în matrice;
- Celula este considerată dacă cel puțin una din celulele
este ocupată de cutie; - Se garantează că există exact un caracter
Pși exact un caracterFîn datele de intrare; - Se garantează că toate caracterele
Bdin datele de intrare formează un dreptunghi în matrice; - Se garantează că player-ul este pe marginea cutiei în poziția inițială dată de datele de intrare;
- Se garantează că player-ul poate ajunge la destinația sa finală urmând regulile descrise ( a avut grijă să creeze un puzzle rezolvabil).
Subtask-uri și punctare
| Subtask | Punctaj | Restricții suplimentare |
|---|---|---|
| 1 | 5 | și Există o secvență cu număr minim de pași în care player-ul împinge cutia doar la dreapta |
| 2 | 15 | Există o secvență cu număr minim de pași în care player-ul împinge cutia doar la dreapta |
| 3 | 10 | și |
| 4 | 20 | |
| 5 | 20 | |
| 6 | 30 | Fără restricții suplimentare |
Exemplul 1
sokoban.in
3 3 1 1
WW.
PBF
W..
sokoban.out
4
Explicație

Exemplul 2
sokoban.in
2 5 1 1
.FPB.
WW...
sokoban.out
7
Explicație

Exemplul 3
sokoban.in
3 5 2 2
WWFWW
WBB..
PBB..
sokoban.out
4
Explicație

Exemplul 4
sokoban.in
7 9 5 1
WWWWWWWWw
.Bw.w...w
.B..w.w.w
PBw.w.w.w
.Bw...w.w
.Bw.w.w.F
WWWWWWW..
sokoban.out
20
Explicație
