如何解决解决递归方法
我有三个变量
人群组,例如:{{David,Sebastian,Yousef},{Boris,Mark}}
人员设置,例如:{David,Mark,Sebastian,Boris,Yousef}
关系集,例如:{{David,Mark},{Sebastian,Boris}}
组集不能有彼此成为朋友的人。
组集不能重复。
我需要创建一个称为
的除法划分(人员集,关系集),并返回一个组集,如上例所示。
需要递归解决,并且不允许循环。
我已经有一个名为areFriends(Person,Person)的方法,如果他们是否是朋友,则返回一个布尔值。
这是我到目前为止得到的:
divide(ps,r){
divide(ps,r,gs){
let p1 = getRandom(ps);
p2 = getRandom(ps);
if(areFriends(p1,p2) = false){
gs.add(p1);
gs.add(p2);
}
remove(p1,ps);
if(getRandom(ps) != 0){
divide(ps,gs);
}
}
我已经处理这个问题很长时间了,确实需要帮助。谢谢!
解决方法
基于一个新的约束(无循环约束),我们需要一个指标(g_ind
)来考虑函数中的组:
divide(ps,r,g = [[]],g_ind = 0)
p <- empty
if there is any person in ps:
p <- take the first person from ps
else:
return
if g_ind >= len(g):
// all current divisions in g have a friend of p
g.add([p]) // add a new division with initial member p
remove p from ps
divide(ps,g,0)
return
else if any friends of p in r exists in g[g_ind]:
divide(ps,++g_ind)
return
else:
g[g_ind].add(p)
remove p from ps
divide(ps,0)
return
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。