Rezolvare completă PbInfo #840 Croco

Cerința

Se dă o matrice cu n linii și m coloane și elemente 0 sau 1, care reprezintă harta unui lac, în care 1 înseamnă uscat, iar 0 înseamnă apă.

Să se plaseze pe fiecare zonă cu uscat un crocodil sau un elefant astfel încât să nu fie două animale din aceeași specie în zone învecinate.

Date de intrare

Fișierul de intrare croco.in conține pe prima linie numerele n m. Următoarele n linii conțin câte m elemente, 0 sau 1, cu semnificația din enunț.

Date de ieșire

Fișierul de ieșire croco.out va conține n linii, fiecare cu câte m caractere din mulțimea {A, C, E}, separate prin câte un spațiu, după cum în zona corespunzătoare a lacului este apa, crocodil sau elefant.

Restricții și precizări

  • 1 ≤ n , m ≤ 100
  • se acceptă orice soluție corectă

Exemplu

croco.in

3 5
1 1 1 0 1
1 1 0 1 1
0 1 1 0 1

croco.out

C E C A C
E C A C E
A E C A C

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 Croco:

#include <iostream>
#include <fstream>
using namespace std;

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

int n,m, a[102][102];

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

void fill(int i , int j , int v)
{
    a[i][j] = v;
    for(int k = 0 ; k < 4 ; k ++)
        if(a[i+dx[k]][j+dy[k]] == 1)
        {
            if(v == 2)
                fill(i+dx[k] , j+dy[k] , 3);
            else
                fill(i+dx[k] , j+dy[k] , 2);
        }
}

int main(){
    fin >> n >> m;
    for(int i = 1 ; i <= n ; i ++)
        for(int j = 1 ; j <= m ; j ++)
            fin >> a[i][j];
    fin.close();
    //bordare , chiar daca este inutila pentru aceasta problema
    for(int i = 0 ; i <= n + 1 ; i ++)
        a[i][0] = a[i][m+1] = 0;
    for(int j = 0 ; j <= m + 1; j ++)
        a[0][j] = a[n+1][j] = 0;
    
    for(int i = 1 ; i <= n ; i ++)
        for(int j = 1 ; j <= m ; j ++)
            if(a[i][j] == 1)
                fill(i , j , 2);
    for(int i = 1 ; i <= n ; i ++)
    {
        for(int j = 1 ; j <= m ; j ++)
            switch (a[i][j])
            {
                case 0: fout << "A "; break;
                case 2: fout << "C "; break;
                case 3: fout << "E "; break;
            }
        fout << endl;
    }
    fout.close();
    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 #840 Croco

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