Advertisement
Milov

Доп. задача "Дерево"

Dec 13th, 2017
133
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 1.74 KB | None | 0 0
  1. # Дерево записывается в список смежности l = [],
  2. # обработка происходит при помощи рекурсивной функции cnt(k,count).
  3. # Вывод проводится при помощи вызова функции для каждой вершины.
  4.  
  5. # Кстати, в формулировке задачи была ошибка:
  6. #  " Задано дерево из N вершин. ... В первой строке задается количество вершин,
  7. #  затем в N строках само дерево.
  8. #  Пример
  9. #  3
  10. #  1 2
  11. #  2 3 "
  12. # Строк ввода самого дерева всегда меньше на один, чем N . Корректней в N-1 строке, так
  13. # как вводятся ребра (по свойствам деревьев).
  14.  
  15. N = int(input())
  16. l = []
  17. for i in range(N-1):
  18.     a = input()
  19.     l.append(a.split())
  20.  
  21. # Суть работы функции заключается в том, чтобы складывать количество вершин каждого
  22. # поддерева, с корнями в вершинах следующего яруса в дереве с заданным корнем,
  23. # при этом пройдет перебор в глубину.
  24.  
  25. def cnt(k,count):
  26.     for j in l:
  27.         if j[0] == str(k):
  28.             count += cnt(j[1], count)
  29.     count += 1
  30.     return count
  31.  
  32. # В выводе цикл проходит по вершинам от 1 до N и печатает значение функции для каждой в форме: (номер вершины : количество вершин в поддереве).
  33. for i in range(1,N+1):
  34.     print(i,':', cnt(i,0))
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement