TOTAL писал(а):
В ящиках с номерами от
до
лежат числа. Берём число из первого непустого ящика и записываем его, за ним следующее и т.д. (до окончания цикла). Снова берём число из первого непустого ящика и т.д. С самого начала храним (и обновляем) номер первого непустого ящика, последнего непустого ящика, следующего непустого ящика (это для каждого непустого ящика).
Ага!
Если я правильно Вас понял, то у меня так и работает. Но это как раз в худшем случае
. Т.е. если эти
точек организованы в, скажем,
циклов длиной 5, причем точки каждого цикла равномерно распределены по данному массиву, то нам будет необходимо пройти по
точек, чтобы вытащить каждый цикл, т.е. всего
(ну там даже если пустые элементы игнорировать все равно получится
).
Правильно я понял?
-- Чт ноя 18, 2010 16:37:18 --venco, TOTAL М.б. я какой-то момент упустил? (Скажите, проект и так горит...)
-- Чт ноя 18, 2010 16:51:39 --Может быть так сделать: рассматриваем входящие точки как куски циклов длины 1, для которых известны точки, которые можно подсоединить к их концам. Создаем новый пустой массив кусков циклов. Проходим по старому массиву, для каждого куска цикла старого массива пробегаемся по новому массиву и проверяем - подходит этот кусок хотя бы к одному куску из нового массива, если подходит - то соединяем куски, иначе - пишем его в новый столбец нового массива. После прохода по старому массиву новый массив будет представлять из себя тоже массив кусков циклов, только кусков будет меньше и они будут длиннее. Записываем теперь новый массив в старый, а новый очищаем и повторяем итерации до тех пор пока не образуются полные циклы. И получается еще, что если на каком-то шаге образовался полный цикл, то его можно вывести и не рассматривать...
М.б. так будет быстрее работать
? Правда писанины будет много и геморроя тоже...