vitek написав:alexb.9184 написав:Тема наступна:
Маю дерево графів.
Вершини дерева можуть відрізнятись за довжиною.
Треба - рівно надрукувати дерево разом з гілками в консолі.
Чи можливо це взагалі виконати?
Тобто, знаючи ширину дисплею розрахувати все так, щоб все рівненько вивести.
Щоб кожна вершина була рівно під гілкою свого родича.
Стосовно термінології : дерево це граф(випадок) але не навпаки. Давайте у вашому випадку забудемо про граф.
Ширину вашого дисплею також проігноруемо, припустимо що ваш термінал гумовий.
Так, грубо але можна.
Виведіть спершу корінь по середині(пробіл в поміч), таким чином ділите термінал на "зліва" та "справа".
Ну і далі виводите потомки посередині не цілого терміналу а вже тих частин, розбиваючи навпіл і ті частини.
Ну і так продовжуєте поки є вершини. Які вершини обирати? - проходите дерево в ширину починаючи з кореня.
Ну власне так я і зробив.
Правда дуже довго намагався все вирівняти.
Враховуючи те, що довелося винаходити кілька нових формул щоб все підрівняти,
всеодно треба було ще все довго доводити до нормального стану.
Робив звісно з використанням класу.
Зробив функцію, яка генерує вектор рядків.
Кожен рядок - це глибина дерева, яка містить ті вершини, які до неї відносяться.
Тепер найголовніше - мій дисплей дає можливість вивести максимум до 4 глибини.
Ну я так розумію далі треба запам'ятовувати 4-й рядок.
Потім проходити по ньому - шукати вершини з дітьми
Ну і далі кожну таку вершину виводити по чотири рядки...
Якось так...
Добре, буду пробувати..
Не очікував на таку кількість відповідей, якщо чесно
Дякую що намагаєтесь допомогти