xxxxxxxxxx
38
let span_edges = [];
function makespanningtree() {
let h_edges = edges.slice().sort((a,b)=>a.cost-b.cost);
let k = knopen[0]; // de eerste van de spantree
k.sp = sp_yes;
let index = 0;
let olength = h_edges.length+1; // de vorige lengte van h_edges
let oindex = -1;
// let comp_edges = h_edges.filter(e=>e.source!=e.dest
while (index < h_edges.length &&
(olength > h_edges.length ||
oindex < index)) {
olength = h_edges.length;
oindex = index;
let e = h_edges[index];
if (e.source.sp == e.dest.sp) {
if (e.source.sp == sp_yes) { // kan verwijderd worden
h_edges.splice(index,1);
} else {
index++;
}
} else { // een span en een no span
k = e.source;
if (k.sp==sp_yes) k = e.dest;
k.sp = sp_yes;
e.sp = sp_yes;
e.other.sp = sp_yes;
span_edges.push(e);
e.source.span_edges.push(e);
e.other.source.span_edges.push(e.other);
h_edges.splice(index,1);
index = 0; // zoek een nieuwe edge
}
}
}