设为首页 加入收藏

TOP

编写程序实现最大团问题
2014-11-24 01:40:37 来源: 作者: 【 】 浏览:7
Tags:编写 程序 实现 最大 问题

#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;


}


】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇优捷Java开发工程师面试题 下一篇润信Java开发工程师面试题

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: