pbqp_node *tgt_node;
vector *src_vec;
vector *tgt_vec;
- num min;
unsigned src_len;
unsigned tgt_len;
unsigned src_index;
+ unsigned new_infinity = 0;
assert(edge);
num elem = mat->entries[src_index * tgt_len + col_index];
if (elem != 0) {
+ if (elem == INF_COSTS && src_vec->entries[src_index].data != INF_COSTS)
+ new_infinity = 1;
+
src_vec->entries[src_index].data = pbqp_add(
src_vec->entries[src_index].data, elem);
-
}
}
- min = pbqp_matrix_get_col_min(mat, col_index, src_vec);
-
- if (min == INF_COSTS) {
+ if (new_infinity) {
unsigned edge_index;
unsigned edge_len = pbqp_node_get_degree(src_node);
for (edge_index = 0; edge_index < edge_len; ++edge_index) {
pbqp_edge *edge_candidate = src_node->edges[edge_index];
+
if (edge_candidate != edge) {
insert_into_edge_bucket(edge_candidate);
}
pbqp_node *src_node;
pbqp_node *tgt_node;
vector *tgt_vec;
- num min;
unsigned tgt_len;
unsigned tgt_index;
+ unsigned new_infinity = 0;
assert(edge);
num elem = mat->entries[row_index * tgt_len + tgt_index];
if (elem != 0) {
+ if (elem == INF_COSTS && tgt_vec->entries[tgt_index].data != INF_COSTS)
+ new_infinity = 1;
+
tgt_vec->entries[tgt_index].data = pbqp_add(
tgt_vec->entries[tgt_index].data, elem);
-
}
}
- min = pbqp_matrix_get_row_min(mat, row_index, tgt_vec);
-
- if (min == INF_COSTS) {
+ if (new_infinity) {
unsigned edge_index;
unsigned edge_len = pbqp_node_get_degree(tgt_node);
for (edge_index = 0; edge_index < edge_len; ++edge_index) {
pbqp_edge *edge_candidate = tgt_node->edges[edge_index];
+
if (edge_candidate != edge) {
insert_into_edge_bucket(edge_candidate);
}