== include(page="template/taskheader" task_id="lacuri") ==
Pe un teren de formă pătrată sunt zone de uscat şi lacuri. Harta terenului este memorată într-un tablou bidimensional n*n cu valori 1 (apă) sau 0 (uscat). Liniile sunt numerotate de la 1 la n, de sus în jos şi coloanele de la 1 la n, 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.
h2. Cerinta
Se doreşte să se traverseze terenul pe uscat, de la poziţia (1,1) la poziţia (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:
# Determină numărul lacurilor care sunt de formă pătrată ÅŸi în acelaÅŸi timp sunt „pline de 1â€.
# ÃŽn cazul în care toate lacurile sunt de formă pătrată ÅŸi în acelaÅŸi timp „pline de 1â€, determinaÅ£i un drum cu proprietatea de mai sus.
Poveste si cerinta...
h2. Date de intrare
Fişierul de intrare lacuri.in are pe prima linie numărul n, iar pe următoarele n linii este harta terenului (fiecare linie are n valori 0 sau 1, separate de câte un spaţiu).
...
h2. Date de iesire
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 1â€;
* în cazul în care toate lacurile sunt de formă pătrată ÅŸi în acelaÅŸi timp „pline de 1â€, 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) ÅŸi terminând cu (n,n).
...
h2. Restrictii
* 2 ≤ n ≤ 100
* Poziţiile (1,1) şi (n,n) sunt sigur libere (cu valoarea 0).
* Dacă există mai multe soluţii se va afişa oricare dintre ele.
* Pot fi cel mult 100 de lacuri şi cel puţin unul; dacă un lac este de formă pătrată, atunci 1 ≤ latura ≤ 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), atunci un alt lac nu poate conÅ£ine vreuna din poziÅ£iile învecinate cu (3,3), adică: (2,3), (2,4), (3,4), (4,4), (4,3), (4,2), (3,2) ÅŸi (2,2).
Pentru cerinţa a) se acordă 30% din punctaj, iar pentru cerinţa b) se acordă 70% din punctaj.
* $... ≤ ... ≤ ...$
h2. Exemplu
table(example). |_. lacuri.in |_. lacuri.out |_. Explicatie |
| 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
| 4
1 1
1 2
1 3
2 3
3 3
4 3
5 3
5 4
5 5
5 6
6 6
|
table(example). |_. lacuri.in |_. lacuri.out |
| This is some
text written on
multiple lines.
| This is another
text written on
multiple lines.
|
h3. Explicatie
# Prima linie conÅ£ine 4 (sunt 4 lacuri de formă pătrată ÅŸi „pline de 1â€)
# Deoarece toate cele 4 lacuri sunt de formă pătrată ÅŸi „pline de 1â€, se scrie ÅŸi drumul ales: de la (1,1), (1,2), (1,3), (2,3), (3,3), ...., (6,6).
# Dacă în poziÅ£ia (3,5) ar fi fost un 0, atunci lacul cu latura 3 nu ar mai fi fost „plin de 1†şi atunci prima linie ar fi conÅ£inut doar valoarea 3 (ar fi fost doar 3 lacuri pătrate ÅŸi „pline de 1â€).
# În exemplul iniţial, dacă în poziţia (6,1) ar fi fost valorea 0, 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 3 în fişierul de ieşire.
# ÃŽn exemplul iniÅ£ial, dacă în poziÅ£ia (5,2) ar fi fost valoarea 0, atunci s-ar fi afiÅŸat doar un 3, pentru că lacul din stânga-jos nu ar fi un lac pătrat ÅŸi „plin de 1â€.
...
== include(page="template/taskfooter" task_id="lacuri") ==