int nonconstraint_edge(edge_t * e) { char *constr; #ifndef WITH_CGRAPH if (E_constr && (constr = agxget(e, E_constr->index))) { #else /* WITH_CGRAPH */ if (E_constr && (constr = agxget(e, E_constr))) { #endif /* WITH_CGRAPH */ if (constr[0] && mapbool(constr) == FALSE) return TRUE; } return FALSE; } static void interclust1(graph_t * g, node_t * t, node_t * h, edge_t * e) { node_t *v, *t0, *h0; int offset, t_len, h_len, t_rank, h_rank; edge_t *rt, *rh; if (ND_clust(agtail(e))) t_rank = ND_rank(agtail(e)) - ND_rank(GD_leader(ND_clust(agtail(e)))); else t_rank = 0; if (ND_clust(aghead(e))) h_rank = ND_rank(aghead(e)) - ND_rank(GD_leader(ND_clust(aghead(e)))); else h_rank = 0; offset = ED_minlen(e) + t_rank - h_rank; if (offset > 0) { t_len = 0; h_len = offset; } else { t_len = -offset; h_len = 0; } v = virtual_node(g); ND_node_type(v) = SLACKNODE; t0 = UF_find(t); h0 = UF_find(h); rt = make_aux_edge(v, t0, t_len, CL_BACK * ED_weight(e)); rh = make_aux_edge(v, h0, h_len, ED_weight(e)); ED_to_orig(rt) = ED_to_orig(rh) = e; }
void interclust1(graph_t *g, node_t *t, node_t *h, edge_t *e) { node_t *v,*t0,*h0; int offset,t_len,h_len,t_rank,h_rank; edge_t *rt,*rh; if (e->tail->u.clust) t_rank = e->tail->u.rank - e->tail->u.clust->u.leader->u.rank; else t_rank = 0; if (e->head->u.clust) h_rank = e->head->u.rank - e->head->u.clust->u.leader->u.rank; else h_rank = 0; offset = e->u.minlen + t_rank - h_rank; if (offset > 0) {t_len = 0; h_len = offset;} else {t_len = -offset; h_len = 0;} v = virtual_node(g); v->u.node_type = SLACKNODE; t0 = UF_find(t); h0 = UF_find(h); rt = make_aux_edge(v,t0,t_len,CL_BACK*e->u.weight); rh = make_aux_edge(v,h0,h_len,e->u.weight); rt->u.to_orig = rh->u.to_orig = e; }