Informatică, întrebare adresată de gadrianowu8hn, 8 ani în urmă

Am nevoie de un algoritm de rezolvare a urmatoarei probleme :

Anexe:

AfloareiAndrei: eu as incerca sa o rezolv folosind: Depth First Search sau Breadth First Search. Gasesti algoritul si explicatioa lui pe internet.

Răspunsuri la întrebare

Răspuns de AfloareiAndrei
2

Am facut un exemplu de rezolvare in care am folosit o functie recursiva. Am last comentarii.

NU ESTE O REZOLVARE COMPLETA. Mai trebuie adaugate cateva chestii dar cred ca te descurci o data ce intelegi metoda asta.

#include <iostream>

using namespace std;

//cifrele din matrice reprezinta culorile

int imagine[5][5] = { {0, 0, 1, 2, 2},

                     {1, 0, 2, 1, 1},

                     {1, 1, 1, 1, 1},

                     {2, 2, 2, 2, 2},

                     {0, 2, 0, 2, 0} };

void recur(int x, int y, int vechi, int nou) //(x, y) -> coordonate, vechi -> culoarea veche, nou -> culoarea noua

{

 if(((x >= 0) && (x < 5)) && ((y >= 0) && (y < 5))) //ma asigur ca, nu depasesc limitele matricei, cand ma deplasez in ea.

 {                                                 //daca am depasit limitele, ma intorc la vechea pozitie, de unde caut o noua pozitie valabila

   imagine[x][y] = nou; //modific valorile la coordonatele (x, y) cu noua valoare.

   //daca conditiile de mai jos sunt indeplinite ma deplasez la urmatoarea pozitie (+-1 pe verticala si orizontala)

   if(imagine[x-1][y] == vechi)

   {

     recur(x-1, y, vechi, nou);

   }

   if(imagine[x][y-1] == vechi)

   {

     recur(x, y-1, vechi, nou);

   }

   if(imagine[x+1][y] == vechi)

   {

     recur(x+1, y, vechi, nou);

   }

   if(imagine[x][y+1] == vechi)

   {

     recur(x, y+1, vechi, nou);

   }

 }

}

int main()

{

 int x=2, y=3, nou=9; //coordonatele (x, y) si noua valoare (nou)

 recur(x, y, imagine[x][y], nou); //apelez functia recursiva care modifica valorile vechi cu cele noi

 //afisez rezultatul

 for(int i=0; i<5; i++)

 {

   for(int j=0; j<5; j++)

   {

     cout << imagine[i][j] << " ";

   }

   cout << endl;

 }

 return(0);

}

Bafta!

Daca nu esti multumit de raspuns, te rog sa il raportezi si va fi sters. :)


gadrianowu8hn: Mersi,am rezolvat înainte de răspunsul tau,dar si metoda ta e fosrte bună,doar ca e cam lunga ! Mersi și succesul
gadrianowu8hn: *Succes
Alte întrebări interesante