longestPaths = {
const allPaths = Object.keys(network).flatMap((id) => [
...findAllPaths(network, id)
]);
const maxLength = Math.max(...allPaths.map((p) => p.length));
const longestPaths = allPaths.filter((p) => p.length === maxLength);
longestPaths.sort((path1, path2) => {
for (let i = 0; i < path1.length; i++) {
const n1 = network[path1[i]];
const n2 = network[path2[i]];
const d = n1.sid - n2.sid;
if (d !== 0) {
return d;
}
}
});
return longestPaths.map((p) => {
const isLinkInPath = (id1, id2) => {
const i = p.indexOf(id1);
return (i >= 0 && p[i - 1] === id2) || p[i + 1] === id2;
};
return {
cmp: p.map((id, i) => network[id]),
idMap: Object.fromEntries(p.map((id, i) => [id, i])),
restNetwork: Object.fromEntries(
Object.entries(network)
.map(([id, node]) => [
id,
{
...node,
links: new Set(
[...node.links].filter((id2) => !isLinkInPath(id, id2))
)
}
])
.filter(([, node]) => node.links.size > 0)
)
};
});
}