I have the following matrix:
1 0 0 1 0 0
0 1 0 0 0 0
0 1 1 0 0 0
0 0 0 1 1 1
0 1 1 0 1 1
The 1
's represent the "islands" (numbers followed vertically and horizontally), which refers to being together. How can I know which numbers are together and how many islands there are, recursively?
In this case there are 5 islands because of the following:
1 - - - - - - - - 1 - - - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - 1 - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - 1 1 - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - 1 1 1 - - - - - -
- - - - - - - - - - - - - - - - - - - - - - 1 1 - 1 1 - - -
I have the following code, but without recursion (does what is needed but is not recursive) or can the code be recursive?:
double conjuntoIslas(int a[][6]){
int contCol, contFil, pivofil, pivocol, auxFil, auxCol;
double sum = 0, island = 0;
bool bol = false;
contCol = 5;
contFil = 4;
while(contCol >= 0 && contFil >= 0){
if(a[contFil][contCol] == 1){
pivofil = contFil;
pivocol = contCol;
auxFil = contFil;
auxCol = contCol;
cout<<endl<<endl<<"CUADRO EN: "<<contFil<<", "<<contCol<<endl;
while(pivofil > 0){
if(a[pivofil-1][pivocol] == 1){
cout<<endl<<"\t"<<"Cuadro ARRIBA de: "<<pivofil<<", "<<pivocol;
sum += 1;
a[pivofil][pivocol] = 0;
a[pivofil-1][pivocol] = 0;
pivocol = auxCol;
while(pivocol > 0){
if(a[pivofil-1][pivocol-1] == 1){
sum += 1;
cout<<endl<<"\t"<<"Cuadro IZQUIERDA de: "<<pivofil-1<<", "<<pivocol;
a[pivofil-1][pivocol-1] = 0;
pivocol--;
}
else{
pivocol = 0;
}
}
a[pivofil-1][pivocol] = 0;
pivocol = auxCol;
pivofil--;
}
else{
pivofil = 0;
}
}
pivofil = auxFil;
while(pivocol > 0){
if(a[pivofil][pivocol-1] == 1){
cout<<endl<<"\t"<<"Cuadro a la IZQUIERDA de: "<<pivofil<<", "<<pivocol;
sum += 1;
a[pivofil][pivocol] = 0;
a[pivofil][pivocol-1] = 0;
pivofil = auxFil;
while(pivofil > 0){
if(a[pivofil-1][pivocol-1] == 1){
cout<<endl<<"\t"<<"Cuadro ARRIBA de: "<<pivofil<<", "<<pivocol-1;
sum += 1;
a[pivofil-1][pivocol-1] = 0;
pivofil--;
}
else{
pivofil = 0;
}
}
pivofil = auxFil;
a[pivofil][pivocol-1] = 0;
pivocol--;
}
else{
pivocol = 0;
}
}
island += sum/sum;
a[contFil][contCol] = 0;
}
if(contCol == 0){
contFil--;
contCol = 5;
}
else{
contCol--;
}
}
return island;
}