new object $graph: $libraries;
var $root created_on = 848800783;
var $root flags = ['variables, 'methods, 'code, 'core];
var $root inited = 1;
var $root managed = [$graph];
var $root manager = $graph;
public method .breadth_search() {
arg node, data, neighbors, is_dest;
var d, i, j, path;
d = #[[node, 'source]];
i = 1;
while ((i <= ((d.keys()).length())) && (!(node = (d.keys())[i++]).(is_dest)(data))) {
refresh();
for j in (node.(neighbors)())
d = d.add(j, node);
}
if (i <= ((d.keys()).length())) {
refresh();
path = [node];
while ((node = d[node]) != 'source)
path += [node];
return path;
} else {
return 0;
}
};
public method .topological_sort() {
arg list, comparator;
var i, j;
i = list.length();
while (i >= 1) {
j = 2;
while (j <= i) {
if ((list[j - 1]).(comparator)(list[j]))
list = list.swap(j - 1, j);
refresh();
j++;
}
i--;
}
return list;
};