под наилучшим имею ввиду результат с наименьшим отклонением от цели,
наилучшим (допускается приближенное решение) образом
p = trunk_base # вершина из которой растет черенок
v = <next vertex> # соседняя вершина к p вдоль цикла
while power[v] != 3:
for n in G[v]:
if n != p:
v = n
p = v
break