最大团模板

本文详细解析了使用深度优先搜索求解最大团问题的算法实现。通过定义矩阵表示点之间的关系,采用dfs进行递归搜索,寻找可能的最大团点数。文章提供了完整的代码示例,包括初始化参数、设置矩阵关系、递归搜索过程及返回结果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

用于求最大团的点数
只要在mp中赋值好n个点对其他所有的点的关系即可


#include<bits/stdc++.h> using namespace std; #define N 60 int n; int mp[N][N]; int ans; int alt[N][N]; int Max[N]; bool dfs(int cur,int tot)//cur是s1集合的个数 { if(0==cur) { if(tot>ans) { ans=tot;return true; } return false; } for(int i=0;i<cur;i++) { if( tot+cur-i<=ans )return false; int u=alt[tot][i]; if( Max[u]+tot<=ans )return false; int next=0; for(int j=i+1;j<cur;j++) if(mp[u][ alt[tot][j] ])alt[tot+1][next++]=alt[tot][j]; if(dfs(next,tot+1)) return 1; } return 0; } int maxclique(void) { ans=0; memset(Max,0,sizeof(Max)); for(int i=n-1;i>=0;i--) { int cur=0; for(int j=i+1;j<n;j++)if(mp[i][j])alt[1][cur++]=j;//1为s1集合 dfs(cur,1); Max[i]=ans; } return ans; } int main() { while(scanf("%d",&n),n) { for(int i=0;i<n;i++) for(int j=0;j<n;j++) scanf("%d",&mp[i][j]); printf("%d\n",maxclique()); } return 0; }

 

转载于:https://www.cnblogs.com/bxd123/p/10387683.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值