我想知道如何在数组上应用洪水填充,我的数组是二维的,其中包含 times new roman 字体类型的字母边界。 边界线包含 1,内外全为 0。 我只想在内部填充所有 1 而不是 0。 但我需要一个不需要更多内存的逻辑。 所以避免递归和堆栈或队列
最佳答案
我通常不给别人做作业,但我喜欢挑战:
int c = -1;
while (c < 0)
{
/* Store breadcrumb trail, look to carry on */
a[x][y] = c--;
if (!hunt(0))
{
/* Nowhere to go, so back-track by looking for breadcrumb */
a[x][y] = 1;
c += 2;
hunt(c);
}
}
bool_t hunt(int v)
{
if (a[x-1][y] == v) { x--; return TRUE; }
if (a[x+1][y] == v) { x++; return TRUE; }
if (a[x][y-1] == v) { y--; return TRUE; }
if (a[x][y+1] == v) { y++; return TRUE; }
return FALSE;
}
请注意,这不会检查是否到达数组的边缘。此外,它假设您的数组元素是例如int
,并且您只在图像中使用值 0
和 1
。
关于graphics - 我想要没有堆栈且没有递归的Flood Fill,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4002873/