题目大意
仙女星幼儿园的快班小朋友们下周要到粟洞公园郊游。带队教师想在郊游时让两名学生组成一个小队进行活动。不过让两名不是朋友的学生组成一队会发生争执或者互不理睬。因此,必须由两名朋友关系的学生组队。
给定各学生的朋友关系详情,编写程序计算出所有可配对的不同方法。任何一个不相同的配对都将被视为一种不同的配对方法。例如,以下两种配对方法就属于不同的配对方法。
●(泰妍,杰西卡)(珊妮,蒂芬妮)(孝渊,俞利)
●(泰妍,杰西卡)(珊妮,俞利)(孝渊,蒂芬妮)

解题思路:
为了使用递归调用,首先将整个操作过程分解为几个小的操作。这道题中,将整个问题分解为m/2个小操作,每个小操作等同于对两名学生的组队。此时问题将变为“给定还未组队的学生名单时,计算出两名朋友间组成小队的组合个数”。因为名单中找出两名互为朋友关系的学生组队后,对剩下学生的组队又相当于前一步骤的操作过程。

出现的问题:
计算组合个数时会经常遇到重复相同答案的现象。为了解决这种错误,可采取只计算特定形态答案的方法。通常使用的方法是,在相同答案中以字典顺序只选择最先得到的答案。例如,忽略(2,3)、(0,1)或(1,0)、(2,3),而选择(0,1)、(2,3)。

为了强制这种属性,在各操作阶段只为序号最靠前的学生配上伙伴,即可解决前面提到的两种问题。对序号最靠前的学生而言,其伙伴的序号肯定比其靠后,所以不可能得到像(1,0)这一类的答案。又因为总是从序号最靠前的学生开始配对,所以也不可能出现像(2,3)、(0,1)这一类答案。代码6-5是按照这种思路编写的代码。

int n ;
bool areFriend[10][10];
// 若第take[i] = i 个学生找到了伙伴,则返回true,否则为false
int countPairings(bool take[10]){int firstFree = -1;for(int i =0;i<n;++i){if(!take[i]){firstFree = i;break;}}//所有的学生都匹配上了if(firstFree == -1)return 1;int ret = 0;//选择与学生组队的伙伴for(int pairWith = firstFree+1;pairWith<n;++i){if(!take[pairWith]&&areFriend[firstFree][pairWith]){take[firstFree] = take[pairWith] = true;ret += countPairings(take);take[firstFree] = take[pairWith] = false;}}return ret;
}

郊游 ID:PICNIC相关推荐

  1. AB级 考试高频词 1000个

    AB级 考试高频词 1000个 1 能力 ability 46 申请 application 91 街区 block 2 在船上 aboard 47 欣赏;感激 appreciate 92 女衬衫 b ...

  2. 全国省市区数据SQL - 省市区

    DROP TABLE IF EXISTS `provinces`; CREATE TABLE `provinces` (`id` int(11) NOT NULL auto_increment,`pr ...

  3. Open edX数据结构Mysql edxapp

    原文出处:http://wiki.edustack.org/doku.php?id=edx:edxapp%E6%95%B0%E6%8D%AE%E5%BA%93%E7%BB%93%E6%9E%84 CR ...

  4. redisson get()数据报错,missing type id property ‘@class’

    redisson get()数据报错: com.fasterxml.jackson.databind.exc.InvalidTypeIdException: Missing type id when ...

  5. IDEA中根据数据库自动生成实体类,并自定义所生成的实体类中的注解 @Table @Id @...

    使用IDEA项目添加Hibernate扩展,生成实体类并配置实体类中的注解 一.使用Hibernate自动生成实体类 1.在项目上右键,选择Add Framework Support找到 Hibern ...

  6. Pytorch - GPU ID 指定 pytorch gpu 指定

    PyTorch 关于多 GPUs 时的指定使用特定 GPU. PyTorch 中的 Tensor,Variable 和 nn.Module(如 loss,layer和容器 Sequential) 等可 ...

  7. OPPO海外官方调试ID

    自己的ID出不来广告时可以使用官方调试ID. 注意包名和ID是绑定的,同时要修改包名.

  8. Spinner 使用的使用 报错:ArrayAdapter requires the resource ID to be a TextView

    Spinner 使用的使用 报错:ArrayAdapter requires the resource ID to be a TextView 的问题 是修改layout的最外成不是使用TextVie ...

  9. java.lang.IllegalArgumentException: No view found for id 0x7f07005f (xx) for for fragment xxFragment

    问题的原因的是自己修改id 的时候弄错了修改下id 就好了 我的是用activity 加载fragment 使用的地方如下 ,确定下面的id 是否在布局中 transaction.add(R.id.c ...

最新文章

  1. Spring总结之SpringMvc下
  2. 内存分段分页机制理解_深入理解虚拟机,JVM高级特性-自动内存管理机制
  3. Qt 调试Caffe
  4. 第2章[2.4] Ext JS的类与类体系
  5. Android -- Sqlite事务
  6. pthread_mutex_init 互斥锁pthread_mutex_t的使用(转)
  7. maria安装包mysql_Redhat 7.3安装系统自带Mariadb安装包
  8. 安卓系统和安卓服务器地址,给安卓应用配置服务器地址
  9. 总结——达内视频(二)
  10. 合并报表excel自动模板_自动合并
  11. Python 第二章 字典
  12. 纯css画三角形/梯形(兼容ie6)
  13. 关于深度学习人工智能模型的探讨(一)(1)
  14. 开源·共享·创新|2020年中国.NET开发者大会圆满收官!
  15. 计算机输入开机密码无法进入,电脑开机无法输入密码怎么办
  16. 生活小妙招-通马桶(这是一篇有味道的博客~)
  17. 爬虫系列 一次采集.NET WebForm网站的坎坷历程
  18. UCOSIII系统任务
  19. Python学习笔记(一)压缩与解压缩文件
  20. 摄像头拍摄运动物体,产生运动模糊/拖影的原因分析

热门文章

  1. 广角相机app哪个比较好用_推荐一款比较好用的工作安排备忘app?
  2. linux dmesg命令(显示开机信息)
  3. JavaScript学习笔记(4)
  4. 【放置奇兵】英雄各属性介绍
  5. windows下如何查看设备的idVendor(厂商标识)和idProduct(产品标识)?
  6. 数字类型及常用的数学函数(Python)
  7. 字典、列表、元祖、字符串的综合(2)
  8. Python多线程threading和多进程multiprocessing的区别及代码实现
  9. PAT乙级题目答案汇总PAT (Basic Level) Practice (中文)
  10. QT安卓web使用mysql_Qt使用MySQL笔记一