Я пытаюсь реализовать алгоритм, который похож на флуд. проблема в том, что я не уверен, каким образом мне следует это реализовать, например, рекурсивно - нерекурсивно.
я знаю, что у каждого есть свои недостатки, но один из них должен быть быстрее другого. рекурсивный открывает новую функцию в стеке, когда нерекурсивный каждый раз выделяет 4 новые точки.
пример для не итеративного:
Stack<Point> stack = new Stack<Point>();
stack.Push(q);
while (stack.Count > 0)
{
Point p = stack.Pop();
int x = p.X;
int y = p.Y;
if (y < 0 || y > h - 1 || x < 0 || x > w - 1)
continue;
byte val = vals[y, x];
if (val == SEED_COLOR)
{
vals[y, x] = COLOR;
stack.Push(new Point(x + 1, y));
stack.Push(new Point(x - 1, y));
stack.Push(new Point(x, y + 1));
stack.Push(new Point(x, y - 1));
}
}
edit: я собираюсь применить следующий алгоритм на карте 600X600 пикселей. хотя заливка не будет применяться на всей карте, она должна покрывать около 30% - 80% карты за каждую итерацию. моя цель - обнаружить ребра на карте высот и пометить эти ребра для дальнейшего использования.