Am nevoie de un algoritm de rezolvare a urmatoarei probleme :
Răspunsuri la întrebare
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. :)