部落卫队问题 (回溯)
原始部落byteland中的居民们为了争抢有限的资源,经常发生冲突。几乎每个居民都有它的仇敌。部落酋长为了组织一支保卫部落的队伍,希望从部落的居民中选出最多的居民入伍,并保证队伍中任何两个人都不是仇敌。
输入格式:
第一行两个正整数n和m,表示byteland部落中有n个居民,居民间有m个仇敌关系, 0<n<200, 0<m<6000。居民编号为1,2,…,n。接下来输入m行中,每行正整数u和v,表示居民u和居民v是仇敌。
输出格式:
输出部落卫队最佳组建方案中包含的居民人数。之后逐个输出卫队组成xi, 1<=i<=n, xi=0表示居民i不在卫队中,xi=1表示居民i在卫队中。
输入样例:
7 10
1 2
1 4
2 4
2 3
2 5
2 6
3 5
3 6
4 5
5 6
输出样例:
3
1 0 1 0 0 0 1
代码实现:注意的点请看注解~
#include <iostream>
using namespace std;int R[201][201] = {0}; //关系矩阵
int x[201] = {0}, cx[201] = {0}; //x[i]=1表示居民在卫队中,反之不在
int n, m; //n是人数,m是仇敌关系数量
int max_num = 0, cmax = 0; //卫队中居民人数bool Bound(int t1) //约束函数:当前的居民在卫队中中是否有仇敌关系
{int j;for (j=1; j<t1; j++){if (cx[j]==1 && R[t1][j]==1){return false;}}return true;
}void Back(int t)
{if (t>n){if (max_num < cmax){max_num = cmax;for (int i=1; i<=n; i++){x[i] = cx[i];}}return;}//1if (Bound(t) == true) //当前居民在卫队中没有找到仇人{cx[t] = 1;cmax++;Back(t+1);cmax--;cx[t] = 0;}//0if (cmax+n-t >= max_num) //剪枝:再往下找,考虑理想情况,卫队居民人数也不可能比当前最大的多了{Back(t+1);}
}int main()
{int u, v;cin >> n >> m;for (int i=1; i<=m; i++){cin >> u >> v;R[u][v] = 1; R[v][u] = 1; //对称矩阵}Back(1);cout << max_num << endl;for (int i=1; i<=n; i++) //编号从1开始{cout << x[i] << " ";}return 0;
}
部落卫队问题 (回溯)相关推荐
- 部落卫队 (回溯搜索)
部落卫队 [问题描述] 原始部落byteland中的居民们为了争夺有限的资源,经常发生冲突.几乎每个居民都有他的仇敌.部落酋长为了组织一支保卫部落的队伍,希望从部落的居民中选出最多的居民入伍,并保证队 ...
- (Java实现) 最大团问题 部落卫队
首先介绍下最大团问题: 问题描述:给一个无向图G=(V,E) ,V是顶点集合,E是边集合.然后在这顶点集合中选取几个顶点,这几 个顶点任意两个之间都有边在E中.求最多可以选取的顶点个数.这几个顶点就构 ...
- 部落卫队 解题报告
部落卫队 [问题描述] 原始部落byteland中的居民们为了争夺有限的资源,经常发生冲突.几乎每个居民都有他的仇敌.部落酋长为了组织一支保卫部落的队伍,希望从部落的居民中选出最多的居民 ...
- 5-3 部落卫队问题 (25 分)
原始部落byteland中的居民们为了争抢有限的资源,经常发生冲突.几乎每个居民都有它的仇敌.部落酋长为了组织一支保卫部落的队伍,希望从部落的居民中选出最多的居民入伍,并保证队伍中任何两个人都不是仇敌 ...
- 最大团问题实例--部落卫队问题实现
首先介绍下最大团问题: 问题描述:给一个无向图G=(V,E) ,V是顶点集合,E是边集合.然后在这顶点集合中选取几个顶点,这几 个顶点任意两个之间都有边在E中.求最多可以选取的顶点个数.这几个顶点就构 ...
- 练习题讲解-【搜索算法】部落卫队
[搜索算法]部落卫队 题目描述 原始部落byteland中的居民们为了争夺有限的资源,经常发生冲突.几乎每个居民都有他的仇敌.部落酋长为了组织一支保卫部落的队伍,希望从部落的居民中选出最多的居民入伍, ...
- 部落卫队 2281
部落卫队Time Limit:10000MS Memory Limit:65536K Total Submit:244 Accepted:166 Case Time Limit:1000MS Desc ...
- 【9505】部落卫队
Time Limit: 1000ms second Memory Limit: 32m 问题描述: 原始部落byteland中的居民们为了争夺有限的资源,经常发生冲突.几乎每个居民都有他的仇敌.部落酋 ...
- 算法设计与分析: 5-27 部落卫队问题
5-27 部落卫队问题 问题描述 原始部落 byteland 中的居民们为了争夺有限的资源,经常发生冲突.几乎每个居民都有他的仇敌.部落酋长为了组织一支保卫部落的队伍,希望从部落的居民中选出最多的居民 ...
最新文章
- MongoDB使用小结:一些常用操作分享
- python常用内置模块-Python基础-22常用内置模块
- 输入十个学生的成绩,判断及格不及格人数,得到不及格人的学号
- 关于对下阶段工作的一些建议10.10
- 腾讯与中国人民大学开源最新研究成果:3TS腾讯事务处理技术验证系统
- wpf调用其他项目界面_WPF开发Prism框架实现一个简单播放器
- ant build里如何指定classpath
- php更新so需要重启吗,不重新编译PHP为php增加openssl.so模块
- 有序链表转换二叉搜索树
- 7-4 超速判断 (10 分)
- 深入理解java虚拟机
- 2018笔试题——求一元一次方程的解
- Unity使用BMFont制作字体
- app store android退款,买完 App、游戏内购就后悔了?手把手教你如何申请 App Store 退款...
- 【开发指南】Spring Cloud集成POI完成Excel读写操作
- android 添加json动画,Lottie 站在巨人的肩膀上实现 Android 酷炫动画效果
- 圣迭戈与哥大电子计算机,加州大学圣迭戈分校
- 微信小程序页面分享出去后用户无法通过分享页面返回首页bug解决方法
- 107、七氟丙烷灭火系统的灭火设计浓度
- 阿翔编程学-Axis日志服务类
热门文章
- verilog语言使用注意事项
- Verilog语言控制Xilinx FPGA引脚demo
- How does “mov (%ebx,%eax,4),%eax” work?
- 计算机系统的cpu数量,设置cpu核心数量方法,电脑降低cpu处理器数量和内存大小图文教程...
- 用时间做种子生成随机数
- 基于LMS及FxLMS算法的ANC主动降噪仿真分析
- 南京大学2020计算机考研分数线,南京大学2020考研复试分数线已公布
- 关于Linux中的SIGABRT信号
- 飞桨首款韩女团小卡扭蛋机
- 网络共享里的计算机无法打开,局域网共享文件夹打不开怎么办