问题描述
我正在尝试实现 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 (将#修改为@)