#include
#include
int a[100][100];
int n,x[100],
bestx[100],
cn=0,
bestn=0;
void Backtrack(int i)
{
if(i>n){
cout<<”\n”;
for(int j=1;j<=n;j++)
{
bestx[j]=x[j];
if(bestx[j]==1);
cout< } bestn=cn; cout<<”\n”< return;} int OK=1; for(int j=1;j if(x[j]&&a[i][j]==0){ OK=0; break;} if(OK){ x[i]=1; cn++; Backtrack(i+1); x[i]=0; cn–;} if(cn+n-i>bestn){ x[i]=0; Backtrack(i+1);} } int main() { printf(“请输入图点的个数:”); int i; cin>>n; for(i=0;i<=n;i++) { for(int j=0;j<=n;j++) { a[i][j]=-1; } } printf(“请输入中的各点之间相连的情况:(不相连用1表示,相连用0表示)\n”); for(i=1;i<=n;i++) { for(int j=1;j<=n;j++) { if(i==j) { a[i][j]=1; } if((i!=j)&&(a[j][i]<0)) { printf(“a(%d,%d)”,i,j); cin>>a[i][j]; a[j][i]=a[i][j]; } } } printf(“该图的点的个数为:%d\n”,n); printf(“相连的边为:\n”); for(i=1;i<=n;i++) { for(int j=1;j<=n;j++) { if((a[i][j]==1)) { printf(“a(%d,%d) “,i,j); } } printf(“\n”); } printf(“最大团的最优解为:\n”); Backtrack(1); return 0; }