Rezolvare completă PbInfo #2184 schior

Un schior profesionist se află pe un platou montan. Harta platoului este împărțită în n rânduri (numerotate de la 1 la n) a câte m parcele (numerotate de la 1 la m), fiecare parcelă reprezentând o zonă de teren de formă pătrată cu latura de 1 metru. Pe fiecare parcelă de pe hartă este scris un număr, ce reprezintă altitudinea parcelei respective. Schiorul se poate deplasa din parcela curentă în oricare din cele opt parcele învecinate (pe orizontală, verticală sau diagonală), cu condiția ca altitudinea noii parcele să fie mai mică sau egală cu altitudinea parcelei în care se afla anterior.

Cerința

Cunoscând coordonatele parcelei în care se află inițial schiorul, să se determine altitudinea minimă la care poate ajunge acesta.

Date de intrare

Pe prima linie a fișierului text schior.in se găsesc, separate printr-un spațiu, n și m, dimensiunile hărții. Pe a doua linie se găsesc, separate printr-un spațiu, l și c, coordonatele parcelei în care se află inițial schiorul. Pe următoarele n linii se găsesc câte m valori, separate prin câte un spațiu, reprezentând altitudinea fiecărei parcele de pe hartă.

Date de ieșire

Fișierul de ieșire schior.out se va scrie un număr natural ce reprezintă altitudinea minimă la care poate ajunge schiorul.

Restricții și precizări

  • 1 ≤ n ≤ 100, 1 ≤ m ≤ 100, 1 ≤ l ≤ 100, 1 ≤ c ≤ 100 numere naturale
  • 0 ≤ valorile altitudinilor ≤ 9999

Exemplu

schior.in

5 4
1 3
4 3 5 6
2 8 8 3
3 5 9 3
1 1 4 5
1 4 5 1

schior.out

2

Explicație

Din parcela (1,3) schiorul se poate deplasa prin parcelele (1,2), (2,1), ajungând la altitudinea 2, sau prin parcelele (2,4), (3,4), ajungând la altitudinea 3.

Cum e corect?

cout < "As la info"; cout << "As la info"; cout >> "As la info";

Felicitări! Poți mai mult?

Avem sute de probleme pentru tine, fiecare cu explicații ușor de înțeles.

Greșit, dar nu-i bai!

Antrenează-te cu sutele de probleme pe care ți le-am pregătit. Îți explicăm fiecare problemă în parte.

Rezolvare

Iată rezolvarea de 100 de puncte pentru problema schior:

#include <fstream>

using namespace std;
ifstream fin("schior.in");
ofstream fout("schior.out");
struct poz
{
    int x,y;
} c[10001];

int dx[]= {0,-1,-1,0,1,1,1,0,-1};
int dy[]= {0,0,1,1,1,0,-1,-1,-1};

int a[103][103], b[103][103], n, m, l1,c1, pr, ul, min1;
int main()
{
    int i,j,xc,yc,xu,yu;
    fin>>n>>m>>l1>>c1;
    for(i=1; i<=n; i++)
        for(j=1; j<=m; j++)
            fin>>a[i][j];


    c[1].x=l1;
    c[1].y=c1;
    pr=1;
    ul=1;
    b[l1][c1]=1;
    min1=a[l1][c1];
    while(pr<=ul)
    {
        xc=c[pr].x;
        yc=c[pr].y;
        pr++;
        for(int d=1; d<=8; d++)
        {
            xu=xc+dx[d];
            yu=yc+dy[d];
            if(xu>=1&& xu<=n && yu>=1 && yu<=m && b[xu][yu]==0 && a[xc][yc]>=a[xu][yu])
            {
                ul++;
                c[ul].x=xu;
                c[ul].y=yu;
                b[xu][yu]=1;
                if(a[xu][yu]<min1)
                    min1=a[xu][yu];
            }
        }
    }

    fout<<min1;

    return 0;
}

Atenție

Enunțurile afișate pe această pagină aparțin exclusiv site-ului PbInfo. Astfel, pentru ștergerea conținutului, puteți să ne contactați la adresa Adresa de email.

Rezolvarea problemei #2184 schior

Pe această pagină găsești rezolvarea de 100 de puncte pentru problema #2184 schior de pe PbInfo.ro. Atenție: nu încurajăm copiatul codului! Totuși, credem cu tărie că analizarea unei soluții corecte este o metodă foarte ușoară de a învăța informatică, astfel că oferim sursele pentru peste 1500 de probleme de pe platforma PbInfo.ro.

Pentru rezolvări PbInfo de la peste 1500 de probleme, vă invităm să intrați pe site-ul nostru!