Igor_DmitrievНаходит ли этот алгоритм лучшее или одно из лучших решений?
Очевидно что нет. Так как он не ищет решения.
Есть ли более удачные варианты?
Конечно есть, так как 1 пункт у вас явно не работает. Рассмотрите случай квадрата или решётки.
Как выделить эти прямые линии?
Читать про методы векторизации.
Достаточно построить скелет. Далее найти в нём узлы, которые имеют более 2-х соседей.
dsge5. Выбрать

с наименьшей суммой квадратов.
Взять от числа

сумму не возможно в принципе.
И тоже самое не понятно как ваш алгоритм пройдет тест с квадратом или решёткой.