Тема: C#
Показать сообщение отдельно
Старый 08.08.2013, 00:21   #129
От заката до рассвета
 
Аватар для $finX
 
Регистрация: 10.06.2009
Адрес: Тюмень
Сообщений: 120
Репутация: 50 [+/-]
-PhantomX-, ну, роди алгоритм, что ты не как дома.

как мне представляется сейчас - создай класс, в нём реализуй хранилище в виде леса, то есть списка деревьев. в этот класс зафигачь метод добавления пары (файл, корневая папка), в котором будет происходить добавление ещё одного дерева в общий список. дерево, соответственно, из двух элементов. плюс реализовываешь процедуру, которая проверяет все деревья в лесу на то, что корневой элемент дерева содержится в другом дереве из леса, в этом случае ты перекидываешь это дерево в другое, в котором элемент встретился.

поясняю на примере.
Скрытый текст:
у тебя подаются пары (для простоты вместо имён каталогов и файлов - просто числа):
(1, 4), (3, 4), (2, 3)

сначала лес пустой.

потом лес [(4 -> 1)]

потом лес [(4 -> 1), (4 -> 3)]. во втором дереве корневой элемент 4 встретился в первом дереве (или наоборот) - в любом случае, ты объединяешь два дерева и получаешь лес [(4 -> 1, 3)].

потом лес [(4 -> 1, 3), (3 -> 2)]. корневой элемент второго дерева 3 встретился в первом дереве. объединяешь и получаешь лес [(4 -> 1, (3 -> 2))]. единственное дерево, оригинальная структура восстановлена.
__________________
— Я пью горячий шоколад только в месяцах, где присутствует буква Р.
— Почему?
— Ну. Жизнь без капризов — это не жизнь.

— Все становится лучше, когда есть Bluetooth.

— В этом мире полно бездомных, грязных носков.
— В моем мире нет. (с) ТБВ
$finX вне форума  
Ответить с цитированием