最大团与最大独立集(递推法+dfs两剪枝求最大团)
传送门
最大团:从无向图的顶点集中选出k个并且k个顶点之间任意两点之间都相邻(完全图),最大的k就是最大团
最大独立集:从无向图中的顶点中选出k个并且k个顶点之间互不相邻,最大的k就是最大独立集
性质:无向图的最大团==该无向图补图的最大独立集,无向图的最大独立集==该无向图补图的最大团
算法实现:应用递推+dfs
令Si={vi,v(i+1),...,vn},用mc[i]表示MC(Si)。倒着算mc[i],那么显然MC(V)=mc[1]。此外有mc[i]=mc[i+1]/mc[i]=mc[i+1]+1,且后一种情况发生的唯一可能是在Si中找到一个包含Vi的团,所以只要搜是不是在Si中存在一个包含Vi且比当前最大团还大的团。
dfs的两个剪枝:
1)current_size+remain_vertex>ans
2)current_size+mc[i]>ans
附上代码:
#include<iostream>
#include<cstdio>
#include<cstring>using namespace std;const int maxn=55;int n;
bool g[maxn][maxn];
bool found;
int len[maxn],list[maxn][maxn],ans,mc[maxn];void dfs(int size)
{if(len[size]==0){if(size>ans){ans=size;found=true;}}for(int k=0;k<len[size]&&!found;k++){if(size+len[size]-k<=ans){break;}int i=list[size][k];if(size+mc[i]<=ans){break;}len[size+1]=0;for(int j=k+1;j<len[size];j++){if(g[i][list[size][j]]){list[size+1][len[size+1]++]=list[size][j];}}dfs(size+1);}
}void max_cluster()
{mc[n]=ans=1;for(int i=n-1;i;i--){found=false;len[1]=0;for(int j=i+1;j<=n;j++){if(g[i][j]){list[1][len[1]++]=j;}}dfs(1);mc[i]=ans;}
}int main()
{while(scanf("%d",&n)!=EOF&&n){for(int i=1;i<=n;i++){for(int j=1;j<=n;j++){scanf("%d",&g[i][j]);}}max_cluster();printf("%d\n",ans);}return 0;
}
最大团与最大独立集(递推法+dfs两剪枝求最大团)相关推荐
- 记忆化搜素,和递推法
记忆化搜素是动态规划的改进,------自上而下,就是在递归重叠子问题时候,对子问题的重复问题的对策,就是一开始对所有子问题进行赋值(一般为-1)这样的标记方法来区分是否被查找过. 递推----也是动 ...
- 随机数字信号处理实验报告三——Levinson和Burg递推法MATLAB实现
完整的实验报告下载连接https://download.csdn.net/download/LIsaWinLee/14884452 一.实验原理 随机信号的功率谱密度用来描述信号的能量特征随频率的变化 ...
- 递推法 c语言,递推法
递推算法 给定一个数的序列H0,H1,-,Hn,-若存在整数n0,使当n>n0时,可以用等号(或大于号.小于号)将Hn与其前面的某些项Hi(0 递推算法是一种简单的算法,即通过已知条件,利用特定 ...
- 常见算法思想2:递推法
递推法 递推算法犹如稳重的有经验的老将,使用"稳扎稳打"的策略,不断利用已有的信息推导出新的东西. 在日常应用中有如下两种递推算法: (1)顺推法:从已知条件出发,逐步推算出要解决 ...
- 随机信号处理AR模型Yule_Walker方程直接解法和Levinson_Durbin递推法的MATLAB与Python实现
AR模型 AR模型的系统函数H(z)可以表示为: 我们的目的就是要求解系统函数的参数a和增益G. Yule_Walker方程 矩阵形式 根据生成的矩阵,可以解出p个参数 ,再根据自相关函数,可以求出系 ...
- 【递推法】错排问题的递推式和推导过程
[递推法]错排问题的递推式和推导过程 前言:这篇博客是帮助没有见过错排的新人更好的理解错排问题的递推式和推导过程,各位大佬可自行跳过 题目链接:洛谷P1595信封 一.错排问题的定义: 很多人 ...
- 错位排列问题(递推法)
问题描述 有n个信封和n个信件,第ii个信件属于第i个信封,我们想知道,有多少种不同的方法,使得没有任何一个信件被装入正确的信封中? 思路 采用递推法. 假设当信和信封的个数为n时,错位排列的个数记为 ...
- 递推(一):递推法的基本思想
所谓递推,是指从已知的初始条件出发,依据某种递推关系,逐次推出所要求的各中间结果及最后结果.其中初始条件或是问题本身已经给定,或是通过对问题的分析与化简后确定. 利用递推算法求问题规模为n的解的基本思 ...
- 算法笔记方法论3 递推法与递归法
你站在桥上看风景看风景的人在楼上看你明月装饰了你的窗子你装饰了别人的梦--卞之琳 递推算法的特点 一个问题的求解需要大量重复计算,在已知的条件和所求问题之间总存在着某种相互联系的关系,在计算时,我们需 ...
最新文章
- libjpeg-turbo介绍及测试代码
- windows常用命令(高级语句篇)
- html表单验证js代码,JavaScript表单验证实现代码
- 五十、opencv调用USB摄像头并保存图片
- Java EE 6示例– Galleria
- Github(3)-本地文件管理
- ArcGIS工具之ET GeoWizards、GeoTools、GeoTools
- FFMPEG 图像拉伸缩放及数据格式转换
- 《天天数学》连载29:一月二十九日
- 【完美】SpringBoot中使用注解来实现 Redis 分布式锁
- frameset 的问题与解决
- GNS3连接VMware中虚拟主机,能相互ping通
- 阿里云服务器如何修改密码
- PHP中使用PDO操作MySQL
- 潮流计算和最优潮流计算
- 计算机网络教室使用,计算机网络教室使用管理制度
- c语言 大小写 islower,C 库函数 islower() 使用方法及示例
- matlab 四分位距,四分位数及matlab实现
- Win10卸载KB5014699补丁教程
- java五子棋网络版源码_网络版五子棋的java源代码.pdf
热门文章
- Tkinter 组件详解(八):Listbox
- PHP使用Laravel生成荣誉证书和往图片上写字
- 会场安排问题(贪心法)
- flarum设置鼠标悬停提示标记为已读
- 多线程基础-守护线程与非守护线程
- 树莓派35/100 - 用graphviz画逻辑电路图
- js 写html代码编辑器,原生JS写一个功能强大的编辑器
- 微信小程序获取手机号登录(Java后端)
- 震旦ADC208复印机显示“请更换显影组件K”后 “哒哒…”的异响
- 基于STM32单片机的水质监测系统(Proteus仿真+程序)