Ну придумать-то можно, вопрос в том, будет ли это понятнее, чем рекурсия в данном случае. Идея такая: 1. Строим список пар (имя объекта, непосредственные зависимости). Для файла это зависимости, для модуля - имена компонентов. 2. Строим дерево зависимостей, т.е. разворачиваем непосредственные зависимости. 3. Сортируем очевидным образом (зависящий идёт позже, если независимы - по имени) 4. Вуаля
Код без учёта циклических зависимостей: http://hpaste.org/78574
Для учёта идея проста, мы храним "родителей" и смотрим, чтобы текущий от них не зависел: http://hpaste.org/78575
Update
Я был не прав в пункте 3, сортировать не нужно. Вот конечный результат: http://hpaste.org/78585
no subject
Date: 2012-12-01 12:17 am (UTC)Идея такая:
1. Строим список пар (имя объекта, непосредственные зависимости). Для файла это зависимости, для модуля - имена компонентов.
2. Строим дерево зависимостей, т.е. разворачиваем непосредственные зависимости.
3. Сортируем очевидным образом (зависящий идёт позже, если независимы - по имени)
4. Вуаля
Код без учёта циклических зависимостей: http://hpaste.org/78574
Для учёта идея проста, мы храним "родителей" и смотрим, чтобы текущий от них не зависел: http://hpaste.org/78575
Update
Я был не прав в пункте 3, сортировать не нужно. Вот конечный результат: http://hpaste.org/78585