原始部落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;
}

部落卫队问题 (回溯)相关推荐

  1. 部落卫队 (回溯搜索)

    部落卫队 [问题描述] 原始部落byteland中的居民们为了争夺有限的资源,经常发生冲突.几乎每个居民都有他的仇敌.部落酋长为了组织一支保卫部落的队伍,希望从部落的居民中选出最多的居民入伍,并保证队 ...

  2. (Java实现) 最大团问题 部落卫队

    首先介绍下最大团问题: 问题描述:给一个无向图G=(V,E) ,V是顶点集合,E是边集合.然后在这顶点集合中选取几个顶点,这几 个顶点任意两个之间都有边在E中.求最多可以选取的顶点个数.这几个顶点就构 ...

  3. 部落卫队 解题报告

    部落卫队 [问题描述]        原始部落byteland中的居民们为了争夺有限的资源,经常发生冲突.几乎每个居民都有他的仇敌.部落酋长为了组织一支保卫部落的队伍,希望从部落的居民中选出最多的居民 ...

  4. 5-3 部落卫队问题 (25 分)

    原始部落byteland中的居民们为了争抢有限的资源,经常发生冲突.几乎每个居民都有它的仇敌.部落酋长为了组织一支保卫部落的队伍,希望从部落的居民中选出最多的居民入伍,并保证队伍中任何两个人都不是仇敌 ...

  5. 最大团问题实例--部落卫队问题实现

    首先介绍下最大团问题: 问题描述:给一个无向图G=(V,E) ,V是顶点集合,E是边集合.然后在这顶点集合中选取几个顶点,这几 个顶点任意两个之间都有边在E中.求最多可以选取的顶点个数.这几个顶点就构 ...

  6. 练习题讲解-【搜索算法】部落卫队

    [搜索算法]部落卫队 题目描述 原始部落byteland中的居民们为了争夺有限的资源,经常发生冲突.几乎每个居民都有他的仇敌.部落酋长为了组织一支保卫部落的队伍,希望从部落的居民中选出最多的居民入伍, ...

  7. 部落卫队 2281

    部落卫队Time Limit:10000MS Memory Limit:65536K Total Submit:244 Accepted:166 Case Time Limit:1000MS Desc ...

  8. 【9505】部落卫队

    Time Limit: 1000ms second Memory Limit: 32m 问题描述: 原始部落byteland中的居民们为了争夺有限的资源,经常发生冲突.几乎每个居民都有他的仇敌.部落酋 ...

  9. 算法设计与分析: 5-27 部落卫队问题

    5-27 部落卫队问题 问题描述 原始部落 byteland 中的居民们为了争夺有限的资源,经常发生冲突.几乎每个居民都有他的仇敌.部落酋长为了组织一支保卫部落的队伍,希望从部落的居民中选出最多的居民 ...

最新文章

  1. MongoDB使用小结:一些常用操作分享
  2. python常用内置模块-Python基础-22常用内置模块
  3. 输入十个学生的成绩,判断及格不及格人数,得到不及格人的学号
  4. 关于对下阶段工作的一些建议10.10
  5. 腾讯与中国人民大学开源最新研究成果:3TS腾讯事务处理技术验证系统
  6. wpf调用其他项目界面_WPF开发Prism框架实现一个简单播放器
  7. ant build里如何指定classpath
  8. php更新so需要重启吗,不重新编译PHP为php增加openssl.so模块
  9. 有序链表转换二叉搜索树
  10. 7-4 超速判断 (10 分)
  11. 深入理解java虚拟机
  12. 2018笔试题——求一元一次方程的解
  13. Unity使用BMFont制作字体
  14. app store android退款,买完 App、游戏内购就后悔了?手把手教你如何申请 App Store 退款...
  15. 【开发指南】Spring Cloud集成POI完成Excel读写操作
  16. android 添加json动画,Lottie 站在巨人的肩膀上实现 Android 酷炫动画效果
  17. 圣迭戈与哥大电子计算机,加州大学圣迭戈分校
  18. 微信小程序页面分享出去后用户无法通过分享页面返回首页bug解决方法
  19. 107、七氟丙烷灭火系统的灭火设计浓度
  20. 阿翔编程学-Axis日志服务类

热门文章

  1. verilog语言使用注意事项
  2. Verilog语言控制Xilinx FPGA引脚demo
  3. How does “mov (%ebx,%eax,4),%eax” work?
  4. 计算机系统的cpu数量,设置cpu核心数量方法,电脑降低cpu处理器数量和内存大小图文教程...
  5. 用时间做种子生成随机数
  6. 基于LMS及FxLMS算法的ANC主动降噪仿真分析
  7. 南京大学2020计算机考研分数线,南京大学2020考研复试分数线已公布
  8. 关于Linux中的SIGABRT信号
  9. 飞桨首款韩女团小卡扭蛋机
  10. 网络共享里的计算机无法打开,局域网共享文件夹打不开怎么办