#include <stdio.h>
#include <time.h>
#include <stdlib.h>
int flag = 0 ;
struct parent
{
int row;
int col;
} ;
void check( int ar[ 5 ] [ 5 ] , int row, int col, struct parent pos[ 30 ] , int * num)
{
if ( col - 1 >= 0 && row - 1 >= 0 ) //Checking Upper-left
{
if ( ar[ row - 1 ] [ col - 1 ] == 1 ) {
ar[ row - 1 ] [ col - 1 ] = - 1 ;
( * num) += 1 ;
pos[ * num] .row = row; pos[ * num] .col = col;
check( ar, row - 1 , col - 1 , pos, num) ;
}
}
if ( col - 1 >= 0 ) //Checking Left
{
if ( ar[ row] [ col - 1 ] == 1 ) {
ar[ row] [ col - 1 ] = - 1 ;
( * num) += 1 ;
pos[ * num] .row = row; pos[ * num] .col = col;
check( ar, row, col - 1 , pos, num) ;
}
}
if ( col - 1 >= 0 && row + 1 <= 4 ) //Checking Bottom-Left
{
if ( ar[ row + 1 ] [ col - 1 ] == 1 ) {
ar[ row + 1 ] [ col - 1 ] = - 1 ;
( * num) += 1 ;
pos[ * num] .row = row; pos[ * num] .col = col;
check( ar, row + 1 , col - 1 , pos, num) ;
}
}
if ( row + 1 <= 4 ) //Checking Bottom
{
if ( ar[ row + 1 ] [ col] == 1 ) {
ar[ row + 1 ] [ col] = - 1 ;
( * num) += 1 ;
pos[ * num] .row = row; pos[ * num] .col = col;
check( ar, row + 1 , col, pos, num) ;
}
}
if ( col + 1 <= 4 && row + 1 <= 4 ) //Checking Bottom-Right
{
if ( ar[ row + 1 ] [ col + 1 ] == 1 ) {
ar[ row + 1 ] [ col + 1 ] = - 1 ;
( * num) += 1 ;
pos[ * num] .row = row; pos[ * num] .col = col;
check( ar, row + 1 , col + 1 , pos, num) ;
}
}
if ( col + 1 <= 4 ) //Checking Right
{
if ( ar[ row] [ col + 1 ] == 1 ) {
ar[ row] [ col + 1 ] = - 1 ;
( * num) += 1 ;
pos[ * num] .row = row; pos[ * num] .col = col;
check( ar, row, col + 1 , pos, num) ;
}
}
if ( col + 1 <= 4 && row - 1 >= 0 ) //Checking Upper-Right
{
if ( ar[ row - 1 ] [ col + 1 ] == 1 ) {
ar[ row - 1 ] [ col + 1 ] = - 1 ;
( * num) += 1 ;
pos[ * num] .row = row; pos[ * num] .col = col;
check( ar, row - 1 , col + 1 , pos, num) ;
}
}
if ( row - 1 >= 0 ) //Checking Up
{
if ( ar[ row - 1 ] [ col] == 1 ) {
ar[ row - 1 ] [ col] = - 1 ;
( * num) += 1 ;
pos[ * num] .row = row; pos[ * num] .col = col;
check( ar, row - 1 , col, pos, num) ;
}
}
if ( * num == 0 )
return ;
else
{
flag++;
if ( flag >= 2 )
( * num) -= 1 ;
check( ar, pos[ * num] .row , pos[ * num] .col , pos, num) ;
}
}
void random5x5( int ar[ ] [ 5 ] )
{
for ( int cnt = 0 ; cnt < 5 ; cnt++ )
{
for ( int c2 = 0 ; c2 < 5 ; c2++ )
{
ar
[ cnt
] [ c2
] = rand ( ) % 2 ; }
}
}
int main( )
{
int ar[ 5 ] [ 5 ] = { 0 , 0 , 0 , 0 , 1 ,
1 , 0 , 0 , 0 , 1 ,
0 , 0 , 0 , 0 , 0 ,
0 , 0 , 0 , 0 , 0 ,
0 , 0 , 0 , 0 , 0 } ;
int countblock = 0 , num = 0 ;
struct parent pos[ 30 ] = { 0 } ;
printf ( " ---Find the connected blocks--- \n \n " ) ; printf ( "Creating a random array:\n " ) ; //random5x5(ar);
for ( int row = 0 , col; row < 5 ; row++ )
{
for ( col = 0 ; col < 5 ; col++ )
{
if ( ar[ row] [ col] == 1 )
{
countblock = countblock + 1 ;
ar[ row] [ col] = - 1 ;
flag = 0 ;
check( ar, row, col, pos, & num) ;
}
}
}
printf ( "\n \n Found the connected blocks! I see only %d of them.\n \n " , countblock
) ; return 0 ;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDx0aW1lLmg+CiNpbmNsdWRlIDxzdGRsaWIuaD4KCmludCBmbGFnID0gMDsKc3RydWN0IHBhcmVudAp7CglpbnQgcm93OwoJaW50IGNvbDsKfTsKCnZvaWQgY2hlY2soaW50IGFyWzVdWzVdLCBpbnQgcm93LCBpbnQgY29sLCBzdHJ1Y3QgcGFyZW50IHBvc1szMF0saW50ICpudW0pCnsKCWlmIChjb2wgLSAxID49IDAgJiYgcm93IC0gMSA+PSAwKSAgIC8vQ2hlY2tpbmcgVXBwZXItbGVmdAoJewoJCWlmIChhcltyb3cgLSAxXVtjb2wgLSAxXSA9PSAxKSB7CgkJCWFyW3JvdyAtIDFdW2NvbCAtIDFdID0gLTE7CgkJCSgqbnVtKSs9MTsKCQkJcG9zWypudW1dLnJvdyA9IHJvdzsgcG9zWypudW1dLmNvbCA9IGNvbDsKCQkJY2hlY2soYXIsIHJvdyAtIDEsIGNvbCAtIDEsIHBvcywgbnVtKTsKCQl9Cgl9CglpZiAoY29sIC0gMSA+PSAwKSAgICAgICAvL0NoZWNraW5nIExlZnQKCXsKCQlpZiAoYXJbcm93XVtjb2wgLSAxXSA9PSAxKSB7CgkJCWFyW3Jvd11bY29sIC0gMV0gPSAtMTsKCQkJKCpudW0pKz0xOwoJCQlwb3NbKm51bV0ucm93ID0gcm93OyBwb3NbKm51bV0uY29sID0gY29sOwoJCQljaGVjayhhciwgcm93LCBjb2wgLSAxLCBwb3MsIG51bSk7CgkJfQoJfQoJaWYgKGNvbCAtIDEgPj0gMCAmJiByb3cgKyAxIDw9IDQpICAgLy9DaGVja2luZyBCb3R0b20tTGVmdAoJewoJCWlmIChhcltyb3cgKyAxXVtjb2wgLSAxXSA9PSAxKSB7CgkJCWFyW3JvdyArIDFdW2NvbCAtIDFdID0gLTE7CgkJCSgqbnVtKSs9MTsKCQkJcG9zWypudW1dLnJvdyA9IHJvdzsgcG9zWypudW1dLmNvbCA9IGNvbDsKCQkJY2hlY2soYXIsIHJvdyArIDEsIGNvbCAtIDEsIHBvcywgbnVtKTsKCQl9Cgl9CglpZiAocm93ICsgMSA8PSA0KSAgICAgICAvL0NoZWNraW5nIEJvdHRvbQoJewoJCWlmIChhcltyb3cgKyAxXVtjb2xdID09IDEpIHsKCQkJYXJbcm93ICsgMV1bY29sXSA9IC0xOwoJCQkoKm51bSkrPTE7CgkJCXBvc1sqbnVtXS5yb3cgPSByb3c7IHBvc1sqbnVtXS5jb2wgPSBjb2w7CgkJCWNoZWNrKGFyLCByb3cgKyAxLCBjb2wsIHBvcywgbnVtKTsKCQl9Cgl9CglpZiAoY29sICsgMSA8PSA0ICYmIHJvdyArIDEgPD0gNCkgICAvL0NoZWNraW5nIEJvdHRvbS1SaWdodAoJewoJCWlmIChhcltyb3cgKyAxXVtjb2wgKyAxXSA9PSAxKSB7CgkJCWFyW3JvdyArIDFdW2NvbCArIDFdID0gLTE7CgkJCSgqbnVtKSs9MTsKCQkJcG9zWypudW1dLnJvdyA9IHJvdzsgcG9zWypudW1dLmNvbCA9IGNvbDsKCQkJY2hlY2soYXIsIHJvdyArIDEsIGNvbCArIDEsIHBvcywgbnVtKTsKCQl9Cgl9CglpZiAoY29sICsgMSA8PSA0KSAgICAgICAvL0NoZWNraW5nIFJpZ2h0Cgl7CgkJaWYgKGFyW3Jvd11bY29sICsgMV0gPT0gMSkgewoJCQlhcltyb3ddW2NvbCArIDFdID0gLTE7CgkJCSgqbnVtKSs9MTsKCQkJcG9zWypudW1dLnJvdyA9IHJvdzsgcG9zWypudW1dLmNvbCA9IGNvbDsKCQkJY2hlY2soYXIsIHJvdywgY29sICsgMSwgcG9zLCBudW0pOwoJCX0KCX0KCWlmIChjb2wgKyAxIDw9IDQgJiYgcm93IC0gMSA+PSAwKSAgICAgIC8vQ2hlY2tpbmcgVXBwZXItUmlnaHQKCXsKCQlpZiAoYXJbcm93IC0gMV1bY29sICsgMV0gPT0gMSkgewoJCQlhcltyb3cgLSAxXVtjb2wgKyAxXSA9IC0xOwoJCQkoKm51bSkrPTE7CgkJCXBvc1sqbnVtXS5yb3cgPSByb3c7IHBvc1sqbnVtXS5jb2wgPSBjb2w7CgkJCWNoZWNrKGFyLCByb3cgLSAxLCBjb2wgKyAxLCBwb3MsIG51bSk7CgkJfQoJfQoJaWYgKHJvdyAtIDEgPj0gMCkgIC8vQ2hlY2tpbmcgVXAKCXsKCQlpZiAoYXJbcm93IC0gMV1bY29sXSA9PSAxKSB7CgkJCWFyW3JvdyAtIDFdW2NvbF0gPSAtMTsKCQkJKCpudW0pKz0xOwoJCQlwb3NbKm51bV0ucm93ID0gcm93OyBwb3NbKm51bV0uY29sID0gY29sOwoJCQljaGVjayhhciwgcm93IC0gMSwgY29sLCBwb3MsIG51bSk7CgkJfQoJfQoJaWYgKCpudW0gPT0gMCkKCQlyZXR1cm47CgllbHNlCgl7CgkJZmxhZysrOwoJCWlmIChmbGFnID49IDIpCgkJCSgqbnVtKS09MTsKCQljaGVjayhhciwgcG9zWypudW1dLnJvdywgcG9zWypudW1dLmNvbCwgcG9zLCBudW0pOwoJfQoJCn0KCnZvaWQgcmFuZG9tNXg1KGludCBhcltdWzVdKQp7Cglmb3IgKGludCBjbnQgPSAwOyBjbnQgPCA1OyBjbnQrKykKCXsKCQlmb3IgKGludCBjMiA9IDA7IGMyIDwgNTsgYzIrKykKCQl7CgkJCWFyW2NudF1bYzJdID0gcmFuZCgpICUgMjsKCQkJcHJpbnRmKCIlZCAiLCBhcltjbnRdW2MyXSk7CgkJfQoJCXByaW50ZigiXG4iKTsKCX0KfQoKCmludCBtYWluKCkKewoJaW50IGFyWzVdWzVdID0geyAwLDAsMCwwLDEsCgkJICAgICAgICAgICAgIDEsMCwwLDAsMSwKCQkgICAgICAgICAgICAgMCwwLDAsMCwwLAoJCSAgICAgICAgICAgICAwLDAsMCwwLDAsCgkJICAgICAgICAgICAgIDAsMCwwLDAsMCB9OwoJaW50CWNvdW50YmxvY2sgPSAwLG51bSA9IDA7CglzdHJ1Y3QgcGFyZW50IHBvc1szMF0gPSB7IDAgfTsKCXNyYW5kKHRpbWUoTlVMTCkpOwoJcHJpbnRmKCIgICAgICAtLS1GaW5kIHRoZSBjb25uZWN0ZWQgYmxvY2tzLS0tICAgICBcblxuIik7CglwcmludGYoIkNyZWF0aW5nIGEgcmFuZG9tIGFycmF5OlxuIik7CgkvL3JhbmRvbTV4NShhcik7Cglmb3IgKGludCByb3cgPSAwLCBjb2w7IHJvdyA8IDU7IHJvdysrKQoJewoJCWZvciAoY29sID0gMDsgY29sIDwgNTsgY29sKyspCgkJewoJCQlpZiAoYXJbcm93XVtjb2xdID09IDEpCgkJCXsKCQkJCWNvdW50YmxvY2sgPSBjb3VudGJsb2NrICsgMTsKCQkJCWFyW3Jvd11bY29sXSA9IC0xOwoJCQkJZmxhZyA9IDA7CgkJCQljaGVjayhhciwgcm93LCBjb2wsIHBvcywgJm51bSk7CgkJCX0KCQkJcHJpbnRmKCIlZCAiLCBhcltyb3ddW2NvbF0pOwoJCX0KCXByaW50ZigiXG4iKTsKCX0KCXByaW50ZigiXG5cbiBGb3VuZCB0aGUgY29ubmVjdGVkIGJsb2NrcyEgSSBzZWUgb25seSAlZCBvZiB0aGVtLlxuXG4iLCBjb3VudGJsb2NrKTsKCXJldHVybiAwOwp9Cgo=