Răspuns :
#include <iostream>
using namespace std;
bool A[1000][1000];
int grupe[1000][1000];
int k = 0;
int n;
bool existagrupa[100000];
void setall(int i, int old_val, int new_val){
for(int j = 0; j <= i; j++)
for(int l = 0; l < n; l++)
if(grupe[j][l] == old_val)
grupe[j][l] = new_val;
existagrupa[old_val] = false;
}
void afisareCoordonate_recursiv(int val, int b_x, int b_y){
if(grupe[b_x][b_y] == val){
cout << b_x << ',' << b_y << '\n';
grupe[b_x][b_y] = 0;
if(b_y < n-1)
afisareCoordonate_recursiv(val, b_x, b_y+1);
if(b_y > 0)
afisareCoordonate_recursiv(val, b_x, b_y-1);
if(b_x < n-1)
afisareCoordonate_recursiv(val, b_x+1, b_y);
if(b_x > 0)
afisareCoordonate_recursiv(val, b_x-1, b_y);
}
}
void afisareCoordonate(int val){
for(int i = 0; i < n; i++)
for(int j = 0; j < n; j++){
if(grupe[i][j] == val){
afisareCoordonate_recursiv(val, i, j);
return;
}
}
}
int main(){
cin >> n;
for(int i = 0; i < n; i++)
for(int j = 0; j < n; j++){
cin >> A[i][j];
if(A[i][j]){
if(i > 0){
if(A[i-1][j])
grupe[i][j] = grupe[i-1][j];
else if(A[i][j-1])
grupe[i][j] = grupe[i][j-1];
else grupe[i][j] = ++k;
if(A[i][j-1] && grupe[i][j-1] != grupe[i][j])
setall(i, grupe[i][j-1], grupe[i][j]);
}else {
if(A[0][j-1])
grupe[0][j] = grupe[0][j-1];
else grupe[0][j] = ++k;
}
existagrupa[grupe[i][j]] = true;
}
}
int grupa_ = 0, totalgrupe = 0;
for(int i = 1; i <= k; i++){
if(existagrupa[i])
totalgrupe++;
}
cout << totalgrupe << '\n';
for(int i = 1; i <= k && grupa_ < totalgrupe; i++){
if(existagrupa[i]){
cout << "Grupa " << ++grupa_ << '\n';
afisareCoordonate(i);
}
}
}
Vă mulțumim că ați ales să vizitați platforma noastră dedicată Informatică. Sperăm că informațiile disponibile v-au fost utile. Dacă aveți întrebări suplimentare sau aveți nevoie de sprijin, nu ezitați să ne contactați. Vă așteptăm cu drag și data viitoare! Nu uitați să adăugați site-ul nostru la favorite pentru acces rapid.