Прикреплённый файл «2013-02-08.printtree.py»

Загрузка

   1 #!/usr/bin/env python
   2 # coding: utf
   3 '''
   4 Ввести дерево в виде списка рёбер
   5 Вывести его разборчиво :)
   6 '''
   7 
   8 # Введём в виде списка Python
   9 Tree=input()
  10 
  11 # Найдём корень
  12 outs=set(p[0] for p in Tree)
  13 ins=set(p[1] for p in Tree)
  14 # Количество вершин
  15 N=max(outs|ins)+1
  16 # Построим матрицу смежности
  17 Nabers=[[0]*N for i in xrange(N)]
  18 for i,j in Tree:
  19     Nabers[i][j]+=1
  20 
  21 def printtree(Nabers, root, prefix="", add="| ", nxt=".", last=False):
  22     '''Напечатать дерево.
  23     Перед каждым элементом печатать prefix
  24     В каждом поддереве после prefix печатать add 
  25     (или пробелы, если текущее дерево було последним)'''
  26     Next=[j for j in xrange(N) if Nabers[root][j]]
  27     print "{0}{1}{2}".format(prefix,root,Next and nxt or "")
  28     for r in Next:
  29         printtree(Nabers, r, prefix+(last and " "*len(add) or add), add, nxt, r==Next[-1])
  30 
  31 # если root не из одного элемента, это не дерево
  32 root=(outs-ins).pop()
  33 w=len(str(N))
  34 printtree(Nabers, root, "", "|"+w*" ", (w-1)*"-"+".", last=True)

Прикреплённые файлы

Для ссылки на прикреплённый файл в тексте страницы напишите attachment:имяфайла, как показано ниже в списке файлов. Не используйте URL из ссылки «[получить]», так как он чисто внутренний и может измениться.

Вам нельзя прикреплять файлы к этой странице.