Ejemplo n.º 1
0
void move_to_free(BinaryTree *tree, Node *root) {
	if(root->ptr) {
		if(root->ptr[LEFT]) {
			move_to_free(tree,root->ptr[LEFT]);
		}
		if(root->ptr[RIGHT]) {
			move_to_free(tree,root->ptr[RIGHT]);
		}
	} else {
		root->ptr = malloc(sizeof *root->ptr * NUM_LINKS);
	}
	DELETE_OBJPTR(tree,root);
	ADD_FREE_NODE(tree,root);
}
Ejemplo n.º 2
0
void mis_permutation::construct(graph_access & G) {
    inconsistencies = 0;
    solution_size = 0;
    free_size = 0;
    total_size = G.number_of_nodes();
    nodes.clear();
    tightness.clear();
    position.clear();
    nodes.resize(total_size);
    tightness.resize(total_size);
    position.resize(total_size);
    onetight_all.init(G.number_of_nodes());

    // Insert solution nodes
    forall_nodes(G, n) {
        nodes[n] = n;
        position[n] = n;
        unsigned int index = G.getPartitionIndex(n);
        // Maybe implement tightness calculations here
        if (index == 1) {
            move_to_solution(n, G);
        } else {
            int tight = calculate_tightness(n, G);
            tightness[n] = tight;
            if (tight == 0) move_to_free(n, G);
            else move_to_non_free(n, G);
            if (tight == 1) onetight_all.insert(n);
        }
    } endfor