邀请最多人,这样每个人都知道一个人并且不认识B人

时间:2016-08-28 10:28:27

标签: java algorithm logic max

我遇到面试问题/逻辑问题。基本上问题是,当给出包含以下信息的输入时,可以找出可以被邀请参加聚会的人数 MAXIMUM

1)共有X人 2)这些人之间总共有Y友谊 3)派对上的每个人都必须知道M个人 4)参加聚会的每个人都不得认识N人 5)人民之间的友谊清单。

以下是一个例子......

1)总共6人 2) 9个友谊6人 3)每个被邀请的人都必须确切地知道其他2个人(与他们成为朋友) 4)每个被邀请的人都不能确切地知道另一个人(不是他们的朋友)

5)友谊如下(每个人都有1到N的唯一标识符,其中N是总人数,在这种情况下为6):

1 2 (表示1和2彼此认识/是朋友)
1 3 (意味着1和3彼此认识/是朋友)
1 4
1 5
2 3
3 4
4 5
5 2
6 2

通过此输入,可邀请的大多数人是4(当您邀请人2,3,4和5时)。如果有人能够向我解释如何在没有特定语言的情况下以Java /算法找到最大值,那就太棒了。

如果这个问题出现在其他地方我很抱歉,我不太确定这种类型的问题/算法是什么,我无法用我能想到的有限数量的搜索词来找到它。

非常感谢。

1 个答案:

答案 0 :(得分:0)

解决此类问题的最简单方法是详尽搜索所有组合。在您的情况下,您希望测试一组可能的被邀请者中的所有人组合。有一个相当简单的递归算法来做到这一点。我将提供伪代码以帮助您开始使用它:

findSolution(invitees, others)
    if conditions are met by invitees
        add invitees to set of solutions
    if there are others to test
        remove first item from others 
        findSolution(invitees, others)
        add first item to invitees
        findSolution(invitees, others)
        remove first item from invitees