欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

2019.03.05-算法-朋友分组问题

程序员文章站 2022-04-08 20:28:52
从业务上抽离出来的问题。 条件: 假设有一个已知的list: List list= new ArrayList(); list.add("A"); list.add("B"); list.add("C"); list.add("D"); …… 假设每一个字母代表一个人 ......

从业务上抽离出来的问题。

条件:

假设有一个已知的list:

list<string>  list= new arraylist<string>();

list.add("a");

list.add("b");

list.add("c");

list.add("d");

……

假设每一个字母代表一个人,人与人之间有两种关系:相容互斥通过isfriendly(a,b)可以获得两人之间的关系

一个朋友圈中所有人都必须相容,且无法再加入其他成员。

例如list有4个人a、b、c、d, ab互斥  其他均相容 ,则可以得到两个朋友圈{acd}  {bcd}

——————

求:如何得到所有不同的朋友圈?

思路1:将所有人两两组合,形成两人朋友圈,接着两人朋友圈尝试添加其他人,形成3人朋友圈……直至所有朋友圈无法加人:,剔除掉重复朋友圈后得到所有不同的朋友圈。

(思路1光想想就脑壳痛……而且当所有人相容的时候显得很傻比= =)

 

思路2:先以a为核心,遍历所有人,找到所有与a相容的人,接而形成以a为中心辐射的朋友圈。   

             而第一个与a互斥的人,形成新的核心x……找到与该核心相容的人,形成以核心为辐射的新的朋友圈……

             第三个核心不能与a、x 兼容 ……

             当不再产生新的核心,代表所有朋友圈已经找到。

 其他思路暂时没想到,个人感觉思路2也不是很高效,欢迎有思路的大佬们指点。

——————————

思路2实现:未完待续……