//--------------------------------------------------------------------------- #include //--------------------------------------------------------------------------- void encuentraRegion(int numRen,int numCol,int** matriz,int **resp,int posRen, int posCol,int index) { /// Checamos si los valores de la posición dada son válidos. if( 0 > posRen || posRen >= numRen || 0 > posCol || posCol >= numCol ) { return; } /// Si ademas de ser validos, son una posición igual al index y no ha sido /// marcado antes... Entonces marcamos y dispersamos. if(matriz[posRen][posCol] == index && resp[posRen][posCol] == 0) { resp[posRen][posCol] = 1; encuentraRegion(numRen,numCol,matriz,resp,posRen+1,posCol,index); encuentraRegion(numRen,numCol,matriz,resp,posRen-1,posCol,index); encuentraRegion(numRen,numCol,matriz,resp,posRen,posCol+1,index); encuentraRegion(numRen,numCol,matriz,resp,posRen,posCol-1,index); } } //--------------------------------------------------------------------------- int main(void) { FILE *input,*output; int **matriz,**resp; int i,j,n,m,w,z; /// Abrimos el archivo de entrada. input = fopen("input.txt","r+t"); /// Leemos los valores de n y m y damos memoria a los arreglos mientras leemos. fscanf(input,"%d %d",&n,&m); matriz = new int*[n]; resp = new int*[n]; for(i = 0; i < n; i++) { matriz[i] = new int[m]; resp[i] = new int[m]; for(j = 0; j < m; j++) { fscanf(input,"%d",&matriz[i][j]); resp[i][j] = 0; } } fscanf(input,"%d %d",&w,&z); /// Cerramos el archivo de entrada. fclose(input); /// Resolvemos encuentraRegion(n,m,matriz,resp,w,z,matriz[w][z]); /// Abrimos el archivo de salida. output = fopen("output.txt","w+t"); /// Imprimimos la matriz respuesta. for(i = 0; i < n; i++) { for(j = 0; j < m; j++) fprintf(output,"%d ", resp[i][j]); fprintf(output,"\n"); } /// Cerramos el archivo de salida y liberamos memoria. fclose(output); for(i = 0; i < n; i++) { delete[] matriz[i]; delete[] resp[i]; } delete[] matriz; delete[] resp; return 0; } //---------------------------------------------------------------------------