伪代码:
void recursive('k'){ // 'k' and 'i' vertices
sumA = 0;
sumB = 0;
for each non visited 'i' neighbor do{
recursive('i');
sumA = sumA + b['i'];
sumB = sumB + max(a['i'], b['i']);
}
a['k'] = 1 + sumA;
b['k'] = sumB;
}
void main(){
a = b = 0; //initialize tables with 0 (zeros)
recursive('X'); //let 'X' be an arbitrary root
cout<<max(a['X'], b['X']);
}
需要证明max(a['X'], b['X'])
是树中最大独立集的基数。
我错过了什么?
提前谢谢。
答案 0 :(得分:0)
元素a [i]是以i为根的子树中包含i的最大独立集的大小。
元素b [i]是以i为根的子树中最大独立集的大小,不包含i。
算法递归计算这些算法,然后在根处选择最大值。