from math import ceil N = 9 arr = [i for i in range(0, N)] nodes = set((i, i + 1) for i in range(N - 1)) print(arr, nodes) def func(start, end): print("start, end: ", start, end) if end - start <= 4: for i in range(start + 1, end + 1): if (start, i) not in nodes: nodes.add((start, i)) for i in range(end - 1, start - 1, -1): if (i, end) not in nodes: nodes.add((i, end)) return [start, end] n = end - start + 1 k = int(n**0.5) size = int(n / k) lst = [] for i in range(k): lst.extend(func(start, start + size - 1)) start += size for i in range(len(lst)): for j in range(i + 1, len(lst)): if (i, j) not in nodes: nodes.add((i, j)) return lst func(0, N - 1) print(nodes) print("No. new nodes added:", len(nodes) - (N - 1))
Standard input is empty
[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