Центр фигуры

From
Andrey Dashkovsky (2:5002/46.4)
To
Alexander Kolosov
Date
2002-11-25T22:51:10Z
Area
RU.ALGORITHMS
Hello Alexander.

23 Ноя 02 20:34, you wrote to Andrew Starsh:

 AK>>> Нужно определить координаты центра фигуры обозначенной
 AK>>> единицами. Насколько я понял, нужно достроить фигуру до
 AK>>> прямоугольника и найти пересечение его диагоналей. Какой
 AK>>> алгоритм лучше использовать?

 AS>> Имхо, куда как пpоще сделать так: найти сpеднюю стpоку, (n-1)/2+1,
 AS>> где n - количество непустых стpок. Потом опpеделить во всех
 AS>> непустых стpоках самую левую непустую колонку (L) и самую пpавую
 AS>> непустую (R). (R-L)/2+1 Все это конечно, если фигуpы коppектны -
 AS>> то есть, непустых стpок - нечетно, и непустых колонок - тоже.

 AK> Да. Забыл сказать, что таких фигур в матрице может быть несколько,
 AK> например так:

 AK> 0000000
 AK> 0110011
 AK> 0110001
 AK> 0111001
 AK> 0000000
 AK> 0011110
 AK> 0000110

 AK> И для каждой нужно найти центр.

Я вот подумал, можно же воспользоваться обычной заливкой. Про заливку как-то
обсуждалось, скажу только обязательно делать не рекурсией, а эмуляцией рекурсии
и при этом использовать не стек, где начинать с последней запомненной клетки, а
очередь, т.е. продолжать с той клетки, которая была запомненна первой, и при
этом заливать не одну клетку, а строку сразу из найденной клетки, а можно даже:
              5
            442444
        44443323335
       53333331344444
        43333323333335
         444332333344
         5333323334
          44445444
Типа 1 - это точка с которой начинается заливка, 2 - это определяем границы по
вертикали, 3 - это заливаем всё, что можем, 4 - это те вершины, что ложим в
очередь, а 5 - это границы фигуры. А в процессе заливки несложно запоминать мин
и макс по обеим осям.

Andrey

... - У Вас совесть есть? - Есть, только мы ее не используем.
--- GoldED+/386 1.1.4.7
 * Origin: Всёфигня кроме пчёл,хотя пчёлы,еслиподумать,тоже фигня (2:5002/46.4)