Press n or j to go to the next uncovered block, b, p or k for the previous block.
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 | 16x 2x 1x 1x 1x 1x 1x 3x 3x 3x 3x 3x 1x 1x | import { isSimpleGraph } from '../essence';
import Graph from '../Graph';
/**
* @description Get the graph's complement
* @description.zh-CN 获取图的补图
*/
export const getGraphComplement = <NodeIDType = any, EdgeType = any>(
originGraph: Graph<NodeIDType, any, EdgeType, any>,
) => {
if (!isSimpleGraph(originGraph)) {
return null;
}
const nodeCount = originGraph.nodeCount();
const complementGraph = new Graph<NodeIDType, any, EdgeType, any>({
compound: originGraph.isCompound(),
directed: originGraph.isDirected(),
multigraph: originGraph.isMultigraph(),
});
const nodes = originGraph.nodes();
for (let i = 0; i < nodeCount; i++) {
const nodei = nodes[i];
complementGraph.setNode(nodei, originGraph.node(nodei));
for (let j = i + 1; j < nodeCount; j++) {
const nodej = nodes[j];
if (!originGraph.hasEdge(nodei, nodej)) {
complementGraph.setEdge(nodei, nodej);
}
}
}
return complementGraph;
};
|