zqq1995 2021-01-11 16:11 采纳率: 0%
浏览 12

已知n个人,若任意两人既可以是朋友,也可以不是朋友,怎么求所有可能的朋友圈

已知n个人,若任意两人既可以是朋友,也可以不是朋友,怎么求所有可能的朋友圈。

怎么用代码枚举 n!  

  • 写回答

1条回答 默认 最新

  • DD(XYX) 2021-01-12 21:05
    关注

    可以这样:

    我们考虑把最终的朋友圈的每一个集合内选一个编号最小的为根,其它所有同集合的点都连向它,那么最终就会形成一个菊花图组成的森林,

    那么由上面所说的规则来看,一种朋友圈所对应的森林是唯一的,可以通过枚举这样的森林来枚举朋友圈。

    那么我们就可以按编号从小到大枚举每个点连向的那个点(父亲),如果自己是根就连向他自己(类似并查集),

    由于每个点连向的点编号肯定不会大于它自己,因此对于一个点 i 只需要枚举 1~i 中的根节点为它的父亲,而复杂度也就是最多 1*2*3*...*n = n!

    对于得到的森林,从每个根节点开始遍历每棵树,所得的就是每个朋友圈中的点

    评论

报告相同问题?

悬赏问题

  • ¥15 网络设备配置与管理这个该怎么弄
  • ¥20 机器学习能否像多层线性模型一样处理嵌套数据
  • ¥20 西门子S7-Graph,S7-300,梯形图
  • ¥50 用易语言http 访问不了网页
  • ¥50 safari浏览器fetch提交数据后数据丢失问题
  • ¥15 matlab不知道怎么改,求解答!!
  • ¥15 永磁直线电机的电流环pi调不出来
  • ¥15 用stata实现聚类的代码
  • ¥15 请问paddlehub能支持移动端开发吗?在Android studio上该如何部署?
  • ¥20 docker里部署springboot项目,访问不到扬声器