回溯算法可作为类AdjacencyGraph的一个成员来实现,为此首先要在该类中加入私有静态成员x(整型数组,用于存储到当前节点的路径),b e s t x(整型数组,保存目前的最优解),b e s t n(b e s t x中点的数量),c n(x中点的数量)。所以类AdjacencyGraph的所有实例都能共享这些变量。
函数maxClique是类AdjacencyGraph的一个私有成员,而MaxClique是一个共享成员。函数maxClique对解空间树进行搜索,而MaxClique初始化必要的变量。MaxClique( v )的执行返回最大完备子图的尺寸,同时它也设置整型数组v,当且仅当顶点i不是所找到的最大完备子图的一个成员时,v [ i ] = 0。
最大完备子图
voidAdjacencyGraph::maxClique(inti) {//计算最大完备子图的回溯代码 if(i>n){//在叶子上 //找到一个更大的完备子图,更新 for(intj=1;j<=n;j ) bestx[j]=x[j]; bestn=cn; return;} //在当前完备子图中检查顶点i是否与其它顶点相连 intOK=1; for(intj=1;j bestn){//尝试x[i]=0 x[i]=0; maxClique(i 1);} } intAdjacencyGraph::MaxClique(intv[]) {//返回最大完备子图的大小 //完备子图的顶点放入v[1:n] //初始化 x=newint[n 1]; cn=0; bestn=0; bestx=v; //寻找最大完备子图 maxClique(1); delete[]x; returnbestn; }