最大子团问题回溯法

问题:一个无向图 G=(V,E),V 是点集,E 是边集。取 V 的一个子集 U,若对于 U 中任意两个点 u 和 v,有边 (u,v)∈E,那么称 U 是 G 的一个完全子图。 U 是一个团当且仅当 U 不被包含在一个更大的完全子图中。G的最大团指包含顶点数最多的一个团。解法:<x1,x2…xn>为0-1向量, xk=1表示顶点k在最大团中。搜索树为子集树,约束条件:当前...
摘要由CSDN通过智能技术生成

问题:一个无向图 G=(V,E),V 是点集,E 是边集。取 V 的一个子集 U,若对于 U 中任意两个点 u 和 v,有边 (u,v)∈E,那么称 U 是 G 的一个完全子图。 U 是一个当且仅当 U 不被包含在一个更大的完全子图中。
G的最大团指包含顶点数最多的一个团。

  • 解法:
  • <x1,x2…xn>为0-1向量, xk=1表示顶点k在最大团中。
  • 搜索树为子集树,
  • 约束条件:当前顶点与团中的每个顶点都有边相连,
  • : 当前极大团内的顶点数,
  • 代价函数:当前团可能扩展为极大团的顶点数上界,F=Cn+n-k,(Cn为当前团顶点数,k结点层数)。
  • 最坏情况 O(n2n )。
  • 在这里插入图片描述
  • B为界,F为代价函数。
    c++代码:
#include<bits/stdc++.h>
using namespace std;
#define M 101

bool a[M][M];//图的邻接矩阵
bool x[M]; //当前 解 
int cn;//当前团的顶点数
int bestn, bestx[M];//当前的最优解
int n, m;//n图G的顶点数 
void backtrack(
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值