fork(1) download
  1. from math import ceil
  2.  
  3. N = 9
  4. arr = [i for i in range(0, N)]
  5. nodes = set((i, i + 1) for i in range(N - 1))
  6. print(arr, nodes)
  7.  
  8. def func(start, end):
  9. print("start, end: ", start, end)
  10. if end - start <= 4:
  11.  
  12. for i in range(start + 1, end + 1):
  13. if (start, i) not in nodes:
  14. nodes.add((start, i))
  15.  
  16. for i in range(end - 1, start - 1, -1):
  17.  
  18. if (i, end) not in nodes:
  19. nodes.add((i, end))
  20.  
  21. return [start, end]
  22.  
  23. n = end - start + 1
  24. k = int(n**0.5)
  25. size = int(n / k)
  26. lst = []
  27.  
  28. for i in range(k):
  29. lst.extend(func(start, start + size - 1))
  30. start += size
  31.  
  32. for i in range(len(lst)):
  33. for j in range(i + 1, len(lst)):
  34. if (i, j) not in nodes:
  35. nodes.add((i, j))
  36.  
  37. return lst
  38.  
  39. func(0, N - 1)
  40. print(nodes)
  41.  
  42. print("No. new nodes added:", len(nodes) - (N - 1))
Success #stdin #stdout 0.05s 9872KB
stdin
Standard input is empty
stdout
[0, 1, 2, 3, 4, 5, 6, 7, 8] {(0, 1), (1, 2), (3, 4), (2, 3), (6, 7), (4, 5), (5, 6), (7, 8)}
start, end:  0 8
start, end:  0 2
start, end:  3 5
start, end:  6 8
{(3, 4), (0, 2), (0, 5), (2, 5), (1, 3), (6, 8), (4, 5), (5, 6), (0, 1), (2, 4), (1, 2), (0, 4), (1, 5), (6, 7), (3, 5), (0, 3), (1, 4), (2, 3), (7, 8)}
No. new nodes added: 11