1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
| int propagate(int bub_array[BUB_NY][BUB_NX], int visited[BUB_NY][BUB_NX], int col)
{
int new = 0;
for (int r = 0; r < BUB_NY; ++r)
{
for (int c = 0; c < BUB_NX; ++c)
{
if (col ? bub_array[r][c] != col : !bub_array[r][c])
continue;
//printf("for %d %d:\n", r, c);
for (int dr = -1; dr <= 1 && !visited[r][c]; ++dr)
{
if (r+dr < 0 || r+dr >= BUB_NY)
continue;
for (int dc = -1; dc <= 1 && !visited[r][c]; ++dc)
{
if ((!dr && !dc) || (dr && dc == 1-2*(r%2)))
continue;
if (c+dc < 0 || c+dc >= BUB_NX-((r+dr)%2))
continue;
//printf(" testing %d %d\n", r+dr, c+dc);
if (visited[r+dr][c+dc])
{
visited[r][c] = 1;
++new;
}
}
}
}
}
return new;
} |
Partager