问题描述:

  给定无向图G=(VE),其中V是非空集合,称为顶点集

  EV中元素构成的无序二元组的集合,称为边集,无向图中的边均是顶点的无序对,无序对常用圆括号“( )”表示。

  如果UV,且对任意两个顶点uvU有(uv)∈E,则称UG完全子图

  G的完全子图UG的团当且仅当U不包含在G的更大的完全子图中。G最大团是指G中所含顶点数最多的团。

  如果U∈V且对任意uvU有(uv)∈E,则称UG空子图G的空子图UG的独立集当且仅当U不包含在G的更大的空子图中。G的最大独立集是G中所含顶点数最多的独立集。

  对于任一无向图G=(VE),其补图G'=(V', E')定义为:V'=V,且(uv)∈E'当且仅当(uv)∈E

  如果UG的完全子图,则它也是G'的空子图,反之亦然。因此,G的团与G'的独立集之间存在一一对应的关系。特殊地,UG的最大团当且仅当UG'的最大独立集


问题定义:

  解空间树中结点类型:bbnode

  活结点优先队列中元素类型为 CliqueNode(cn 表示与该节点相应的团的定点数,un表示结点为根的子树中的最大顶点树的上界。level表示结点在子集空间树中所处的层次;ch 左右儿子的结点标记)

  ch=1  左儿子  ch=0  右儿子

  ptr 指向解空间树中相应结点的指针

  cn+n-level+1表示定点数上界的un值。

代码描述:

相关结构体定义:

class bbnode{friend class Clique;
private:bbnode * parent;bool LChild;
};
class CliqueNode{friend class Clique;
public:operator int () const {return un;}
private:int cn,un,level;bbnode *ptr;
};
class Clique{friend void main(void);
public:int BBMaxClique(int []);
private:void AddLiveNode(MaxHeap<CliqueNode> &H,int cn,int un,int level,bbnode E[],bool ch);int * * a ,n;
};

AddLiveNode:将当前构造的活结点 加入到子集空间树中并插入活结点优先队列中。

void Clique::AddLiveNode(MaxHeap<CliqueNode> &H,int cn,int un,int level,bbnode E[],bool ch)
{bbnode * b = new bbnode;b->parent = E;b->LChild = ch;CliqueNode N;N.cn = cn;N.level = level;N.un = un;N.Insert(N);
}

算法核心代码:BBMaxClique

子集树的根节点是 初始扩展结点 cn为0

i 表示当前扩展结点的解空间树中所处的层次。

首先考察左儿子:

  顶点加入当前团,检查该顶点与当前团中其他顶点是否有边相连。

  都有边,可行,纳入 活结点 优先队列中,AddLiveNode(),接着考察当前扩展结点的 右儿子结点,仅当un>bestn时,右子树中可能含有最优解  ;

  否则,不可行。

int Clique::BBMaxClique(int bestx[])
{MaxHeap<CliqueNode> H(1000);bbnode * E = 0;int i=1,cn = 0,bestn = 0;while(i != n+1){bool OK = true;bbnode * B = E;for(int j = i-1;j>0;B=B->parent,j--){if(B->LChild && a[i][j]==0){OK = false;break;}}if(OK){if(cn + 1 > bestn)bestn = cn + 1;AddLiveNode(H,cn+1,cn+n-i+1,i+1,E,true);}if(cn+n-i >= bestn)AddLiveNode(H,cn+1,cn+n-i+1,i+1,E,true);CliqueNode N;H.DeleteMax(N);E = N.ptr;cn = N.cn;i = N.level;}for(int j=n;j>0;j--){bestx[j] = E->LChild;E = E->parent;}return bestn;
}

最大团问题-分支限界相关推荐

  1. 算法设计与分析期末总结

    0000前言:基本是为了我自己看的一些我容易忘记的东西,为考试作准备把,主要使后半部分的知识,前半部分请看算法设计与分析阶段考总结 第五章 回溯算法是一种系统地搜索问题的解的方法.某个问题的所有可能解 ...

  2. 作业12——分支限界解决最大团和图m着色问题

    1.问题 最大团:求一张无向图的最大团.团的定义:给定图G=(V,E),其中,V={1,-,n}是图G的顶点集,E是图G的边集,图G的团就是一个两两之间有边的顶点集合,团是G的一个完全子图.如果一个团 ...

  3. 分支限界——最大团问题

    给定有一个无向图,找出最大团个数. 最大团也就是该图中最大的完全图(各顶点之间都有边). 算法思想:设p为所有点集的集合,依次取出p中的顶点作为团的起始点,也就是以该点为起点开始拓展,每次查看相邻顶点 ...

  4. 中北大学算法分析与设计实验报告六(最大团问题)

    中北大学算法分析与设计实验报告六(最大团问题) 1.实验名称 实验六 回溯与分支限界算法实验 2.实验目的 题目:最大团问题 强化学生利用回溯算法和优化处理实际问题的能力. 3.训练知识点集群 (1) ...

  5. 2022-2028年中国团购行业投资分析及前景预测报告

    [报告类型]产业研究 [出版时间]即时更新(交付时间约3个工作日) [发布机构]智研瞻产业研究院 [报告格式]PDF版 本报告介绍了团购行业相关概述.中国团购行业运行环境.分析了中国团购行业的现状.中 ...

  6. 消息延迟队列处理拼团时间到期

    1.RabbitMqConfig /*** * 延时队列交换机* * 注意这里的交换机类型:CustomExchange* ** * @return* */ @Bean public CustomEx ...

  7. 飞桨领航团 x Datawhale联合Meetup来了!杭州的小伙伴可以见面了!

    Datawhale线下 主办:百度飞桨,Datawhale 飞桨领航团是飞桨开发者的兴趣社区,为开发者们提供丰富的本地技术沙龙.Meetup.及线上交流平台,面向所有对人工智能及深度学习领域感兴趣的开 ...

  8. 易想团购 注入 user.php,易想团购系统通杀SQL注入漏洞分析及利用漏洞预警 -电脑资料...

    刚打开红黑看到J8基友写的一个{易想团购系统 最新版 通杀}的文章,看他贴的代码里面有个get_client_ip()函数,哈哈,我猜没过滤,果断下了一套程序, 找到get_client_ip()函数 ...

  9. HDU1530(最大团问题)

    1定义: 其中,形式参数t表示第t个顶点,Place(t)用来判断第t个顶点能否放入团里.二维数组a[][]是图的邻接矩阵.一维数组x[]记录当前解.搜索到第t层时,从第1 个顶点用第t-1个顶点的状 ...

最新文章

  1. win10 vs2015 编译caffe2
  2. python第二大奇数_python-2.7 – matplotlib,包含奇数个子图
  3. caffe的python接口学习(8):caffemodel中的参数及特征的抽取
  4. 在Spring中嵌入HSQLDB服务器实例
  5. java session 详解
  6. jquery自定义一个放大镜
  7. ionic自动生成启动页和图标
  8. JVM调优日志解析分析
  9. Web3 是去中心化的“骗局”?
  10. 出于安全考虑,千万不要绕开 CORS!
  11. 【matlab】元胞数组的创建
  12. python 基础学习1
  13. MyEclipse2014安装aptana插件
  14. ug80浩强工具_浩强工具下载|浩强UG工具下载 v2.59 最新版 - 比克尔下载
  15. excel表转成PDF文档
  16. offer和面经分享(内含offer截图)
  17. mysql emoji 问号_mysql数据库怎么存入emoji表情,更改utf8mb4后为什么出现全是问号...
  18. Mac系统开发常见问题-Mac登录界面多了一个其他账户选项
  19. 小程序拨打电话功能,微信小程序点击手机号,拨打电话~!
  20. java applet插件_Atitit.java的浏览器插件技术 Applet japplet attilax总结

热门文章

  1. 公钥、私钥、数字签名和数字证书的概念及解密
  2. linux更新模块,GNOME 3.29.3 发布,大量模块更新及功能改进
  3. 成都东软学院php期末考试题,求大神。。。C语言期末项目答案。。。题在一楼。。。...
  4. 与context的关系_Go中的Context超时和关闭是如何实现的呢?
  5. 计算机三级嵌入式系统考试之矩阵键盘
  6. Java并发包下的CAS相关的原子操作
  7. fastapi 基础使用
  8. MySQL中的索引使用
  9. arch Linux添加源,在Arch Linux系统中使用Archlinuxcn源(清华源)的方法
  10. 微型计算机字长为4表示,一台微型计算机的字长为4个字节,它表示什么?