int N,x[51],//当前解
//bestx[51],//当前最优解
cn=0,//当前顶点数
bestn=0;//当前最大顶点数
void Backtrack(int i)
{//计算最大团
if(i>N){
bestn=bestn<cn?cn:bestn;
return;
}
//检查顶点i与当前团的连接
int OK=1;
for(int j=1;j<i;j++)
if(x[j]&&map[i][j]==0){
//i与j不连接
OK=0;
break;
}
if(OK){//x[i]=1
x[i]=1;
cn++;
Backtrack(i+1);
x[i]=0;
cn--;
}
if(cn+N-i>bestn){ //剪枝
x[i]=0;
Backtrack(i+1);
}
}