最大团问题问题提出是,给定一个无向图
,如下图所示,选择顶点集合V的一个子集,这个子集中任意两个顶点之间的边都属于边集E,且这个子集包含顶点的个数是顶点集合V所有同类子集中包含顶点个数最多的。
采用回溯法求解该最大团问题,并回答以下问题:
1)分析该问题解空间和解空间结构。
1、定义最大团问题的解空间
最大团问题的解可以表示为一个n元组{x1,x2,…,xn},xi(1<=i<=n)的取值为1或0,表示顶点i属于或不属于最大团。
2、建立最大团问题的解空间结构
最大团问题的解空间结构可以表示为一棵完全二叉树。解空间树中的每个结点都有左右两个分支,左分支用1标识,表示第i个顶点属于最大团;右分支用0标识,表示第i个顶点不属于最大团。这棵解空间树有2n个叶结点,解空间树从树的根结点到叶结点的路径定义了最大团问题的一个解。
2)写出算法实现代码并截屏程序的运行结果。
package twelve;
public class MaxClique {
static int[] x;//当前解,往左为1,右为0
static int n = 6;//图G的顶点数
static int cn;//当前顶点数(团中)
static int bestn;//当前最大顶点数
static int[] bestx;//当前最优解
static int[][] a = {
{
0,0,0,0,0,0,0},
{
0,0,1,0,1,1,1},
{
0,1,0,1,1,1,0},
{
0,0,1,0,1,0,0},
{
0,1,1,1,0,1,0},
{
0,1,1,0,1,0,1},
{
0,1,0,0,0,1,0}};//图G的邻接矩阵
public static