static unsigned get_minimal_alternative(pbqp *pbqp, pbqp_node *node)
{
- pbqp_edge *edge;
vector *node_vec;
- vector *vec;
- pbqp_matrix *mat;
- unsigned edge_index;
- unsigned max_degree = 0;
unsigned node_index;
unsigned node_len;
unsigned min_index = 0;
num min = INF_COSTS;
- int is_src;
assert(pbqp);
assert(node);
node_len = node_vec->len;
for (node_index = 0; node_index < node_len; ++node_index) {
- num value = node_vec->entries[node_index].data;
+ num value;
/* Some node buckets and the edge bucket should be empty. */
assert(node_bucket_get_length(node_buckets[1]) == 0);
pbqp_node_bucket *bucket_deg3 = node_bucket_deep_copy(node_buckets[3]);
pbqp_node_bucket *bucket_red = node_bucket_deep_copy(reduced_bucket);
- /* TODO */
+ /* Select alternative and solve PBQP recursively. */
+ select_alternative(node, node_index);
apply_brute_force_reductions(pbqp);
+ value = determine_solution(pbqp->dump_file);
+
if (value < min) {
min = value;
min_index = node_index;
}
+
+ /* Some node buckets and the edge bucket should still be empty. */
+ assert(node_bucket_get_length(node_buckets[1]) == 0);
+ assert(node_bucket_get_length(node_buckets[2]) == 0);
+ assert(edge_bucket_get_length(edge_bucket) == 0);
+
+ /* Clear modified buckets... */
+ node_bucket_clear(&node_buckets[0]);
+ node_bucket_clear(&node_buckets[3]);
+ node_bucket_clear(&reduced_bucket);
+
+ /* ... and restore old PBQP state. */
+ node_bucket_copy(&node_buckets[0], bucket_deg0);
+ node_bucket_copy(&node_buckets[3], bucket_deg3);
+ node_bucket_copy(&reduced_bucket, bucket_red);
+
+ /* Free copies. */
+ node_bucket_free(bucket_deg0);
+ node_bucket_free(bucket_deg3);
+ node_bucket_free(bucket_red);
}
- return 0;
+
+ return min_index;
}
void apply_Brute_Force(pbqp *pbqp)