Probleme de informatica - enunturi si rezolvari

Probleme de informatică
Clasa a IX-a
Elementele de bază C++ (46)
Subprograme predefinite (1)
Fişiere text (2)
Algoritmi elementari (109)
Tablouri unidimensionale (83)
Tablouri bidimensionale (64)
Probleme diverse (13)
Clasa a X-a
Subprograme (funcții) (87)
Şiruri de caractere (49)
Tipul înregistrare (26)
Recursivitate (57)
Alocarea dinamică a memoriei (2)
Liste înlănţuite (25)
Algoritmul lui Lee (1)
Clasa a XI-a
Metoda "Divide et impera" (12)
Metoda Backtracking (85)
Metoda Greedy (6)
Programare dinamică (18)
Grafuri neorientate (37)
Grafuri orientate (38)
Arbori (33)
Clasa a XII-a
Elemente de bază C# (32)
POO în C# (13)
Programare vizuală în C# (10)
Examen de bacalaureat
Competențe digitale
Examen de atestat
Admitere UBB (18)
O harta este data intr-o matrice n*m in care valorile 1 reprezinta uscatul, iar valorile 0 reprezinta apa. Doua zone de uscat se considera ca fac parte din acelasi continent daca sunt vecine pe linie sau pe coloana. Determinati numarul de continente de pe harta si care este aria (numarul de valori de 1) maxima dintre ariile continentelor.
Exemplu:
harta.in
6 6
1 1 1 0 1 0
0 0 1 0 1 1
1 1 1 0 0 0
0 1 0 1 1 1
0 0 0 1 1 1
1 1 0 0 0 0
harta.out
4 (numarul de continente)
8 (aria continentului din stanga-sus)

#include <fstream>
using namespace std;
ifstream fin("harta.in");
ofstream fout("harta.out");

int a[102][102];

void fill(int a[102][102], int n, int m, int i, int j, int c)
{
    a[i][j]=c;
    if(a[i-1][j]==1) fill(a,n,m,i-1,j,c);//sus
    if(a[i][j+1]==1) fill(a,n,m,i,j+1,c);//dreapta
    if(a[i+1][j]==1) fill(a,n,m,i+1,j,c);//jos
    if(a[i][j-1]==1) fill(a,n,m,i,j-1,c);//stanga
}

int main()
{
    int n,m,c=0;
    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]==1)
            {
                c++;
                fill(a,n,m,i,j,c+1);
            }
    for(int i=1;i<=n;i++)
        {
            for(int j=1;j<=m;j++) fout<<a[i][j]<<" ";
            fout<<endl;
        }
    fout<<c<<endl;
    int max=0;
    for(int cul=2;cul<=c+1;cul++)
    {
        int s=0;
        for(int i=1;i<=n;i++)
            for(int j=1;j<=m;j++)
                if(a[i][j]==cul) s++;
        if(s>max)  max=s;
    }
    fout<<max;
    fin.close();
    fout.close();
    return 0;
}

21 aug 2018
Site-ul conține 867 de probleme rezolvate
Copyright © 2009-2018 Muresan Vasile Ciprian