12 void order_nodes(
const int N,
const int *
const merge,
const t_index *
const node_size,
int *
const order)
33 queue[0].node = N - 2;
39 parent = queue[idx].node;
42 child = merge[parent];
49 queue[idx].node = child - 1;
51 pos += node_size[child - 1];
54 child = merge[parent + N - 1];
59 queue[idx].node = child - 1;
65 #define size_(r_) (((r_ < N) ? 1 : node_size[r_ - N]))
67 template <const
bool sorted>
74 std::stable_sort(Z2[0], Z2[N - 1]);
80 for (
t_index i = 0; i < N - 1; ++i) {
87 node1 = nodes.
Find(Z2[i]->node1);
88 node2 = nodes.
Find(Z2[i]->node2);
91 nodes.
Union(node1, node2);
105 merge[i] = (node1 < N) ? -
static_cast<int>(node1) - 1 :
static_cast<int>(node1) - N + 1;
106 merge[i + N - 1] = (node2 < N) ? -
static_cast<int>(node2) - 1 :
static_cast<int>(node2) - N + 1;
107 height[i] = Z2[i]->dist;