Bron-Kerbosch JavaScript 实现

问题描述

我正在尝试实现 BK 的标准(无枢轴,无排序)版本。我不是特别了解算法(我还没有找到很好的解释......)但我认为伪代码很简单,所以我试了一下。它不起作用。 cliques 数组(应该包含形成的最大 cliques)通常包含 4 个重复值的长数组。

因为我不明白它是如何直观地工作的,所以我在调试时很快就迷路了。 如果有人能给我一个很好的资源来解释这个算法,向我解释它,或者告诉我下面的代码有什么问题,我将不胜感激:

let cliques = [];

let adjList = [ 
[2,3],[4,5],[0,3,4,2,[2,1,1]
];



function bronKerbosch(P,R,X) {
  if (P.length === 0 && X.length === 0)
    // if P and X are empty
    cliques.push(R);

  for (let i = 0; i < P.length; i++) {
    let v = P[i];
    let PnN = []; // P intersection with neighbours of v
    let XnN = []; // X intersection with neighbours

    for (let j = 0; j < adjList[v].length; j++) {
      for (let k = 0; k < P.length; k++)
        if (P[k] === adjList[v][j]) PnN.push(P[k]); // finding intersection of P and N(v)

      for (let l = 0; l < X.length; L++)
        if (X[l] === adjList[v][j]) XnN.push(X[l]); // finding intersection of X and N(v)
    }

    
    R.push(v);
    bronKerbosch(PnN,XnN);


    for (let i = 0; i < P.length; i++) if (P[i] === v) P.splice(i,1);
    // P = P-v

    X.push(v); // X = X reunion v
  }
}

// 

function maxClique() {
let P = [0,5]; // graph w 6 nodes
let X = [];
let R = [];

bronKerbosch(P,X);
}

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)