Advertisement
LegionMammal978

trees.py

May 29th, 2020
51
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 0.91 KB | None | 0 0
  1. import networkx as nx
  2. import sys
  3.  
  4. def enc_tup(t):
  5.     return str(len(t)) + ''.join(sorted(enc_tup(s) for s in t))
  6.  
  7. def unr_tup(g):
  8.     c = nx.center(g)
  9.     if len(c) == 1:
  10.         return enc_tup(nx.to_nested_tuple(g, c[0]))
  11.     else:
  12.         t1 = enc_tup(nx.to_nested_tuple(g, c[0]))
  13.         t2 = enc_tup(nx.to_nested_tuple(g, c[1]))
  14.         return t1 if t1 <= t2 else t2
  15.  
  16. gl_prev = {'0': nx.empty_graph(1)}
  17. n = 1
  18. tot = 0
  19.  
  20. while True:
  21.     for t in sorted(gl_prev.keys()):
  22.         print(t, flush=True)
  23.     tot += len(gl_prev)
  24.     print(tot, file=sys.stderr)
  25.     gl_cur = {}
  26.     for gold in gl_prev.values():
  27.         for k, deg in gold.degree:
  28.             if deg == 4:
  29.                 continue
  30.             gnew = gold.copy()
  31.             gnew.add_edge(k, n)
  32.             tnew = unr_tup(gnew)
  33.             if tnew not in gl_cur:
  34.                 gl_cur[tnew] = gnew
  35.     gl_prev = gl_cur
  36.     n += 1
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement