Rezolvare completă PbInfo #3220 foto

Alina este pasionată de fotografiile alb-negru. Ea ales o imagine pe care a codificat-o binar într-o matrice de dimensiune n x m cu valori 0 corespunzătoare pentru alb (pe care le-a numit puncte luminoase) și cu valori 1 corespunzătoare pentru negru (pe care le-a numit puncte întunecate). Astfel, ea identifică în imaginea codificată zone luminoase și zone întunecate, o zonă fiind o porțiune a matricei care conține elemente cu aceeași valoare, trecerea de la un element la altul al zonei făcându-se doar prin deplasări pe orizontală sau pe verticală.

Cerința

Ajutați-o pe Alina să găsească cea mai luminoasă zonă și determinați numărul de puncte luminoase ale acesteia.

Date de intrare

Pe prima linie a fișierului text foto.in se găsesc două numere naturale n și m care reprezintă numărul liniilor, respectiv numărul coloanelor matricei. Pe următoarele n linii se găsesc câte m valori binare, separate prin câte un spațiu, reprezentând elementele matricei care codifică imaginea.

Date de ieșire

Fișierul de ieșire foto.out trebuie să conțină o singură linie pe care se va afla numărul punctelor din cea mai luminoasă zonă a imaginii.

Restricții și precizări

  • 1 ≤ n ≤ 100, 1 ≤ m ≤ 100, numere naturale
  • dacă nu există nicio zonă luminoasă, se va considera că cea mai luminoasă zonă are 0 elemente

Exemplu

foto.in

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

foto.out

5

Explicație

Zona cea mai luminoasă este formată din elementele: (1,2), (1,3), (2,3), (3,2), (3,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 foto:

#include <fstream>
using namespace std;

ifstream fin("foto.in");
ofstream fout("foto.out");

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

short a[101][101],n,m;
int mx,nr;

int interior(int x, int y);
void umple(int x, int y, int& mark);


int main()
{
    fin>>n>>m;
    for(int i=1;i<=n;i++)
    for(int j=1;j<=m;j++)
        fin>>a[i][j];

    for(int i=1;i<=n;i++)
    for(int j=1;j<=m;j++)
        if(a[i][j]==0)
        {
        nr=0;
        umple(i,j,nr);
        if(nr>mx)mx=nr;
        }
    fout<<mx<<'\n';
    return 0;
}
void umple(int x, int y, int &mark)
{
    int l,c,k;
    mark++;
    a[x][y]=-1*mark;
    for(k=1;k<=4;k++)
    {
        l=x+dx[k];
        c=y+dy[k];
        if(interior(l,c) && (a[l][c]==0))
           umple(l,c,mark);
    }
}
int interior(int x, int y)
{
    return x>0 && x<=n && y>0 && y<=m;
}

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 #3220 foto

Pe această pagină găsești rezolvarea de 100 de puncte pentru problema #3220 foto 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!