Sunteți pe pagina 1din 1

Olimpiada de informatică

Etapa locală, 23 ianuarie 2010 – judeţul Cluj

Clasele a XI-a şi a XII-a


PROBLEMA 1 – SOKOBAN
Sokoban este un binecunoscut joc de strategie în care un muncitor trebuie să împingă până la locurile lor
finale mai multe lăzi, într-un depozit virtual. Deoarece în situaţia în care există un număr arbitrar de lăzi
găsirea unei soluţii poate fi un lucru foarte dificil, vom considera o versiune simplificată a jocului, în care
există o singură ladă sau nici o ladă. În cazul în care în depozit nu există nici o ladă muncitorul trebuie să
ajungă el însuşi cu număr minim de mutări la un anumit loc iar dacă în depozit există o ladă, atunci aceasta
trebuie împinsă până ajunge la locul ei final cu un număr minim de mutări.
Depozitul este reprezentat ca o matrice pătratică cu n linii şi n coloane. Obstacolelor din depozit (ziduri-
lor) le corespund valori 1 în matrice iar poziţiilor libere le corespund valori 0. Nu este permis ca muncitorul
sau lada să ajungă în poziţia unui obstacol sau în afara depozitului. Muncitorul se poate deplasa în patru
direcţii, ce corespund celor patru puncte cardinale; lada poate fi împinsă doar dacă muncitorul are contact
nemijlocit cu ea pe una din cele patru laturi.
Se cere să se scrie un program care, cunoscând tipul de problemă (cu o ladă sau fără nici o ladă), să
determine numărul minim de mutări în care muncitorul sau lada ajung la locul lor final.
Date de intrare
Datele de intrare se citesc din fişierul SOKOBAN.IN, care are următoarea structură:
Prima linie conţine un număr tip, care poate fi 0 sau 1, reprezentând numărul de lăzi.
Dacă tip este 0, atunci a doua linie conţine patru numere naturale l1, c1, l2, c2 care reprezintă, în ordine,
coordonatele linie-coloană ale locului de pornire şi respectiv locului final pentru muncitor, iar dacă tip este 1,
atunci a doua linie conţine şase numere naturale l1, c1, l2, c2, l3, c3 care reprezintă, în ordine, coordonatele
linie-coloană ale muncitorului, ale locului iniţial al lăzii şi respectiv ale locului final al lăzii.
A treia linie conţine un număr natural n reprezentând dimensiunea depozitului, iar următoarele n linii
conţin câte n valori 0 sau 1, separate prin câte un spaţiu, reprezentând configuraţia de locuri libere şi ocupate.
Date de ieşire
Fişierul de ieşire SOKOBAN.OUT va conţine pe prima linie un singur număr natural reprezentând numărul
minim de mutări în care muncitorul sau lada, după caz, vor ajunge la locurile lor finale.
Restricţii şi precizări
 3 ≤ n ≤ 10
 numerotarea liniilor şi coloanelor în matricea ce reprezintă depozitul începe de la zero, deci 0 ≤ l1,
c1, l2, c2, l3, c3 ≤ n-1 şi (l1,c1)≠(l2,c2)≠(l3,c3)
 datele de test vor fi astfel alese încât întotdeauna să existe soluţie; datele de intrare sunt corecte
Exemple
SOKOBAN.IN SOKOBAN.OUT Explicaţii
0 10 O posibilă succesiune de comenzi de deplasare este:
1333 NVVVSSSEEE
5
00000
00100
01010
00001
00000
1 23 O posibilă succesiune de comenzi de deplasare este:
552340 VVNNNEENNVVSSSSESVVVSVN
7
0000000
0010100
0000000
1110111
0000000
0000000
0000000
Timp maxim de execuţie/test : 1 secundă

S-ar putea să vă placă și