Problema nu a fost foarte grea avand in vedere ca exista o metoda destul
       de simpla si foarte eficienta de rezolvare.
       Aceasta era:
         - folosim o matrice auxiliara B (avand dimeniunile matricii A),
           B(i,j) retinand numarul maxim de pasi cu care am putut ajunge in
           punctul (i,j)
         - iterativ, cat timp mai exista modificari, pornim de la elementul
           cu valoarea cea mai mica (element neselectat pana la momentul
           respectiv) si incercam sa urcam in matrice. Daca am ajuns intr-un
           anumit punct (i,j) al matricii cu un numar de pasi mai mare decat
           numarul de pasi inregistrat in b(i,j), modificam valoarea lui b(i,j)
           si ne continuam "urcarea" in matrice; in caz contrar, ne oprim.
    
         Algoritmul in pseudocod este urmatorul:
         B=0 // B este matricea nula
         cat timp s-au mai facut modificari
           {
            selectez elementul de valoare minima (xmin,ymin)
            rec(xm,ym,0)
           }
    
         procedura recursiva rec este:
         rec(x,y,k) // k este numarul de pasi cu care am ajuns in punctul (x,y)
         {
          daca B(x,y)<k
          {
            B(x,y)=k;
            rec(x+1,y,k+1);
            rec(x-1,y,k+1);
            rec(x,y+1,k+1);
            rec(x,y-1,k+1);
          }
         }
    
         Acest algoritm are complexitatea medie O(n^3), desi poate ajunge pe
    cazul cel mai nefavorabil la O(n^4).
    
         Algorimul optim de rezolvare este unul de complexitate O(n^2 log n).
    Este un algoritm "destept", si ii felicit pe cei cativa care l-au gasit (care
    nu sunt obligatoriu cei din capul clasamentului; asa ca, cei care au obtinut
    punctaj maxim pe aceasta problema, fara a folosi unul din cei doi algoritmi
    descrisi aici, sunt rugati sa-si posteze solutia pe lista).
         Algoritmul incepea prin sortarea elementelor matricii in ordine cresca-
    toare a valorii elementelor.
         Apoi parcurgem aceste elemente sortate si pentru fiecare element (i,j)
    realizam urmatoarele:
        {
          daca unul dintre cei 4 vecini este mai mic decat el atunci,
              daca B(i,j)<B(i+1,j)+1
                   atunci B(i,j)=B(i+1,j)+1; // exemplu pentru vecinul "de sus"
          // matricea B are aceasi semnificatie ca si la primul algoritm
        }
    
        In acest caz nu este suficienta decat o singura parcurgere a vectorului
    sortat, deoarece in mod sigur elementele mai mici decat elementul curent au
    fost prelucrate inaintea acestuia (ceea ce nu se intampla si la primul
    algoritm).
        Cam asta este.