#include "defs.h" /* make iterative improvement in net */ nroute() { REG DPIN ip, Lp; REG i; INT odel, ndel, span, step, gain; if (npins < 3) return; for (span = npins ; span >= 2; span = (span + 1) >> 1) { gain = 0; for (step = 2; step <= span; step++) { i = 0; loop: ip = &pinvec[i]; Lp = &pinvec[i + step]; odel = -1; while (Lp <= &pinvec[npins]) { ndel = distance(ip, Lp); if (odel < 0) odel = distance(ip-1, Lp - 1); if ((ip->del + Lp->del) > (odel + ndel)) { exchange(ip, Lp, odel, ndel); i = (step < i)? i - step : 0; gain++; goto loop; } odel = ndel; ip++; Lp++; i++; } } if (gain == 0) break; } }