lacuri

Time limit: 0.1s Memory limit: 16MB Input: lacuri.in Output: lacuri.out

Pe un teren de formă pătrată sunt zone de uscat şi lacuri. Harta terenului este memorată într-un tablou bidimensional nnn \cdot n cu valori 11 (apă) sau 00 (uscat). Liniile sunt numerotate de la 11 la nn de sus în jos şi coloanele de la 11 la nn, de la stânga la dreapta.

Fiecare lac este înconjurat de o suprafaţă de teren uscat. Excepţie fac doar lacurile situate la marginea terenului care sunt înconjurate de uscat doar prin interiorul terenului nu şi prin afara acestuia.

Cerință

Se doreşte să se traverseze terenul pe uscat, de la poziţia (1,1)( 1, 1 ) la poziţia (n,n)(n, n), pe un drum de lungime minimă, mergând pas cu pas.

La un pas, se ajunge de la un pătrăţel la altul învecinat cu el spre nord, est, sud sau vest. Să se scrie un program care:

a) Determină numărul lacurilor care sunt de formă pătrată şi în acelaşi timp sunt „pline de 11
b) În cazul în care toate lacurile sunt de formă pătrată şi în acelaşi timp „pline de 11”, determinaţi un drum cu proprietatea de mai sus.

Date de intrare

Fişierul de intrare lacuri.in are pe prima linie numărul nn, iar pe următoarele nn linii este harta terenului (fiecare linie are nn valori 00 sau 11, separate de câte un spaţiu).

Date de ieșire

Fişierul de ieşire lacuri.out va conţine:

  • pe prima linie: numărul de lacuri ce sunt de formă pătrată şi în acelaşi timp „pline de 11
  • în cazul în care toate lacurile sunt de formă pătrată şi în acelaşi timp „pline de 11”, urmează liniile ce descriu drumul de lungime minimă ales. Fiecare linie din fişier conţine câte o pereche de coordonate ale poziţiilor succesive prin care trece drumul (linia şi coloana, separate cu un spaţiu), începând cu (1,1)(1,1) şi terminând cu (n,n)(n,n)

Restricții și precizări

  • 2n1002 \leq n \leq 100
  • Poziţiile (1,1)(1,1) şi (n,n)(n,n) sunt sigur libere (cu valoarea 00)
  • Dacă există mai multe soluţii se va afişa oricare dintre ele
  • Pot fi cel mult 100100 de lacuri şi cel puţin unul; dacă un lac este de formă pătrată, atunci 1laturan11 \leq \text{latura} \leq n-1. Indiferent de forma lor, lacurile sunt sigur „izolate”, adică nu se „ating” deloc de alt lac. De exemplu, dacă un lac conţine poziţia (3,3)(3,3), atunci un alt lac nu poate conţine vreuna din poziţiile învecinate cu (3,3)(3,3), adică: (2,3),(2,4),(3,4),(4,4),(4,3),(4,2),(3,2)(2,3), (2,4), (3,4), (4,4), (4,3), (4,2), (3,2) şi (2,2)(2,2).

Exemplu

lacuri.in

6
0 0 0 0 0 0
0 1 0 1 1 1
0 0 0 1 1 1
0 0 0 1 1 1
1 1 0 0 0 0
1 1 0 0 1 0

lacuri.out

4
1 1
1 2
1 3
2 3
3 3
4 3
5 3
5 4
5 5
5 6
6 6

Explicație

a) Prima linie conţine 44 (sunt 44 lacuri de formă pătrată şi „pline de 11”)
b) Deoarece toate cele 44 lacuri sunt de formă pătrată şi „pline de 11”, se scrie şi drumul ales: de la (1,1),(1,2),(1,3),(2,3),(3,3),,(6,6)(1,1), (1,2), (1,3), (2,3), (3,3), \ldots, (6,6).

Observaţii

  1. Dacă în poziţia (3,5)(3,5) ar fi fost un 00, atunci lacul cu latura 33 nu ar mai fi fost „plin de 11” şi atunci prima linie ar fi conţinut doar valoarea 33 (ar fi fost doar 33 lacuri pătrate şi „pline de 11”)
  2. În exemplul iniţial, dacă în poziţia (6,1)(6,1) ar fi fost valorea 00, atunci nu ar fi fost toate lacurile pătrate (cel din stânga-jos nu ar fi fost pătrat) şi s-ar fi afişat doar un 33 în fişierul de ieşire
  3. În exemplul iniţial, dacă în poziţia (5,2)(5,2) ar fi fost valoarea 00, atunci s-ar fi afişat doar un 33, pentru că lacul din stânga-jos nu ar fi un lac pătrat şi „plin de 11

Log in or sign up to be able to send submissions!