All files / src/generate compelement.ts

100% Statements 16/16
100% Branches 4/4
100% Functions 1/1
100% Lines 14/14

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;
};