7
int dd_uvcross(Agnode_t *v, Agnode_t *w, int use_in, int use_out)
13
if (use_in) for (e = agfstin(w); e; e = agnxtin(e)) {
14
w_inv = dd_order(e->node);
15
for (f = agfstin(v); f; f = agnxtin(f)) {
16
v_inv = dd_order(f->node);
17
if (v_inv > w_inv) cross++;
21
if (use_out) for (e = agfstout(w); e; e = agnxtout(e)) {
22
w_inv = dd_order(e->node);
23
for (f = agfstout(v); f; f = agnxtout(f)) {
24
v_inv = dd_order(f->node);
25
if (v_inv > w_inv) cross++;
31
#define dd_xpenalty(e) 1 /* edge crossing coefficient of e */
33
int dd_ncross(ddview_t *view)
35
int i, k, r, cross, max, *count;
42
for (r = view->config->low; r < view->config->high; r++) {
43
rd = dd_rankd(view,r);
45
k = dd_rankd(view,r+1)->n + 1;
46
count = malloc(k * sizeof(count[0]));
47
for (i = 0; i < k; i++) count[i] = 0;
50
for (i = 0; i < rd->n; i++) {
53
for (e = agfstout(v); e; e = agnxtout(e)) {
54
for (k = dd_order(e->node) + 1; k <= max; k++)
55
cross += count[k] * dd_xpenalty(e);
59
for (e = agfstout(v); e; e = agnxtout(e)) {
60
int inv = dd_order(e->node);
61
if (inv > max) max = inv;
62
count[inv] += dd_xpenalty(e);