1

Тема: Дерево графів в консолі

Тема наступна:

Маю дерево графів.
Вершини дерева можуть відрізнятись за довжиною.

Треба - рівно надрукувати дерево разом з гілками в консолі.
Чи можливо це взагалі виконати?
Тобто, знаючи ширину дисплею розрахувати все так, щоб все рівненько вивести.
Щоб кожна вершина була рівно під гілкою свого родича.

2

Re: Дерево графів в консолі

Що таке дерево графів ? (що таке граф - знаю, що таке дерево - знаю, що таке дерево графів - не знаю)
Як вершини можуть відрізнятись за довжиною ?

Що значить рівно надрукувати дерево ?
Задачу не можливо виконати поки не ясно яким має бути результат.
До чого тут ширина дисплею ? (навіть ширина консолі не завжди існує)
Давай сюди конкретний приклад дерева і як воно має бути виведено.

3

Re: Дерево графів в консолі

Дерево графів я ще можу собі уявити (наприклад https://www.wikitree.com/wiki/Graf-1071 )
Але якщо це не крокодили, то у них висота, а не довжина.

Подякували: wander1

4

Re: Дерево графів в консолі

alexb.9184 написав:

Тема наступна:

Маю дерево графів.
Вершини дерева можуть відрізнятись за довжиною.

Треба - рівно надрукувати дерево разом з гілками в консолі.
Чи можливо це взагалі виконати?
Тобто, знаючи ширину дисплею розрахувати все так, щоб все рівненько вивести.
Щоб кожна вершина була рівно під гілкою свого родича.

Стосовно термінології : дерево це граф(випадок) але не навпаки. Давайте у вашому випадку забудемо про граф.
Ширину вашого дисплею також проігноруемо, припустимо що ваш термінал гумовий.
Так, грубо але можна.
Виведіть спершу корінь по середині(пробіл в поміч), таким чином ділите термінал на "зліва" та "справа".
Ну і далі виводите потомки посередині не цілого терміналу а вже тих частин, розбиваючи навпіл і ті частини.
Ну і так продовжуєте поки є вершини. Які вершини обирати? - проходите дерево в ширину починаючи з кореня.

Подякували: alexb.91841

5

Re: Дерево графів в консолі

Data Structures and Algorithms in Java Рекомендую (він і по С++ багато що писав), там в нього програма що показує як змінюються дерева(і не тільки) в динаміці, коли щось додаємо чи проходимо..

Подякували: alexb.91841

6

Re: Дерево графів в консолі

Консольний вивід — це просто текст. Спробуйте зобразити в тестовому редакторі те, що збираєтесь отримати, і самі зробіть висновок, реально це чи ні. Шрифт у редакторі має бути з фіксованою шириною (такий, як Consolas, Lucida Console, Free Mono, Courier New тощо).

Подякували: leofun011

7

Re: Дерево графів в консолі

напевно треба шукати шось типу ascii tree graph

8

Re: Дерево графів в консолі

GNU cflow ?

9

Re: Дерево графів в консолі

vitek написав:
alexb.9184 написав:

Тема наступна:

Маю дерево графів.
Вершини дерева можуть відрізнятись за довжиною.

Треба - рівно надрукувати дерево разом з гілками в консолі.
Чи можливо це взагалі виконати?
Тобто, знаючи ширину дисплею розрахувати все так, щоб все рівненько вивести.
Щоб кожна вершина була рівно під гілкою свого родича.

Стосовно термінології : дерево це граф(випадок) але не навпаки. Давайте у вашому випадку забудемо про граф.
Ширину вашого дисплею також проігноруемо, припустимо що ваш термінал гумовий.
Так, грубо але можна.
Виведіть спершу корінь по середині(пробіл в поміч), таким чином ділите термінал на "зліва" та "справа".
Ну і далі виводите потомки посередині не цілого терміналу а вже тих частин, розбиваючи навпіл і ті частини.
Ну і так продовжуєте поки є вершини. Які вершини обирати? - проходите дерево в ширину починаючи з кореня.

Ну власне так я і зробив.
Правда дуже довго намагався все вирівняти.
Враховуючи те, що довелося винаходити кілька нових формул щоб все підрівняти,
всеодно треба було ще все довго доводити до нормального стану.

Робив звісно з використанням класу.
Зробив функцію, яка генерує вектор рядків.
Кожен рядок - це глибина дерева, яка містить ті вершини, які до неї відносяться.

Тепер найголовніше - мій дисплей дає можливість вивести максимум до 4 глибини.
Ну я так розумію далі треба запам'ятовувати 4-й рядок.
Потім проходити по ньому - шукати вершини з дітьми
Ну і далі кожну таку вершину виводити по чотири рядки...
Якось так...

Добре, буду пробувати..

Не очікував на таку кількість відповідей, якщо чесно
Дякую що намагаєтесь допомогти

10

Re: Дерево графів в консолі

leofun01 написав:

Що таке дерево графів ? (що таке граф - знаю, що таке дерево - знаю, що таке дерево графів - не знаю)
Як вершини можуть відрізнятись за довжиною ?

Що значить рівно надрукувати дерево ?
Задачу не можливо виконати поки не ясно яким має бути результат.
До чого тут ширина дисплею ? (навіть ширина консолі не завжди існує)
Давай сюди конкретний приклад дерева і як воно має бути виведено.

Вибаче за мій французький.
Звісно, малось на увазі кількість літер яку може вмістити 1 рядок терміналу (згоден консоль така собі назва..)

Дерево - ну, мабуть одне із стандартних
Корінь та потім вершини, які можуть мати дітей, можуть не мати
Дітей завжди двоє (якщо такі є)