Avoid if statements for checking neighboring indexes in a 2D array

kerdemdemir via Digitalmars-d-learn digitalmars-d-learn at puremagic.com
Sun Jul 16 03:37:39 PDT 2017


My goal is to find connected components in a 2D array for example 
finding connected '*'
chars below.

       x x x x x x
       x x x x x x
       x x * * x x
       x x * * x x
       x x x * * x
       * x x x x x


There are two connected '*' group in this example. First group is 
composes of six '*' located closer to middle and the second group 
composes only one '*' char located in the left bottom corner.

Do to this I generally implement a recursive algorithm which 
repeat calling the same function by checking all neighbors around 
the current index. I generally end up with something like :

void foo( int row, int col)
{
     //Do something here like caching the index

     if ( twoDimensionData[row - 1][col] == '*')
        foo(row- 1, col);
     else if ( twoDimensionData[row + 1][col] == '*')
        foo(row+ 1, col);
     else if ( twoDimensionData[row - 1 ][col - 1] == '*')
        foo(row - 1, col - 1);

//..... I need 5 more of this bad boys I mean if checks
}

Is there any better way to achieve this with cool std functions 
like enumerate or iota without needing to write eight if checks?


More information about the Digitalmars-d-learn mailing list