int len;
if (tgt_index < src_index) {
- return get_edge(pbqp, tgt_index, src_index);
+ unsigned tmp = src_index;
+ src_index = tgt_index;
+ tgt_index = tmp;
}
pbqp_node *src_node = get_node(pbqp, src_index);
+ pbqp_node *tgt_node = get_node(pbqp, tgt_index);
assert(src_node);
- assert(get_node(pbqp, tgt_index));
+ assert(tgt_node);
len = ARR_LEN(src_node->edges);
for (i = 0; i < len; ++i) {
pbqp_edge *cur_edge = src_node->edges[i];
- if (cur_edge->tgt->index == tgt_index) {
+ if (cur_edge->tgt == tgt_node) {
return cur_edge;
}
}
{
pbqp_edge *edge = get_edge(pbqp, src_index, tgt_index);
+ if (tgt_index < src_index) {
+ pbqp_matrix_transpose(pbqp, costs);
+ add_edge_costs(pbqp, tgt_index, src_index, costs);
+ return;
+ }
+
if (edge == NULL) {
edge = alloc_edge(pbqp, src_index, tgt_index, costs);
} else {