任何人都可以提出解决问题的算法或代码吗?我在下面附上了我失败的代码。
市长团队 为了确保在选举中获胜,市长决定组建一个他的熟人组成的团队,每个人都是其他人的朋友。知道市长的所有n个熟人之间的关系,创建一个人数最多的团队m。如果有几个解,只推导出一个就足够了。
规格输入 第一行包含市长 n (n < 50) 的熟人数量。第二行包含有友好关系的对 k 的数量。接下来的 k 行包含成对的数字 - 朋友的数量。
输出 第一行包含市长团队的最大组成。下一行包含按人数升序排列的市长团队的组成。
输入数据示例
5
6
1 2
2 3
1 3
3 5
1 5
5 2
输出示例
4
1 2 3 5
我的失败尝试(仅计算正确结果的 44%):
def foo(couples):
max_friends = 0
result = ''
counter = 0
while counter < len(couples):
temp_friends = [couples[counter][0], couples[counter][1]]
for j in couples:
if j[0] not in temp_friends:
for z in temp_friends:
if j[0] in temp_friends:
break
if j == (z, j[0]) or j == (j[0], z): continue
if (z, j[0]) in couples or (j[0], z) in couples:
temp_friends.append(j[0])
if j[1] not in temp_friends:
for z in temp_friends:
if j[1] in temp_friends:
break
if j == (z, j[1]) or j == (j[1], z): continue
if (z, j[1]) in couples or (j[1], z) in couples:
temp_friends.append(j[1])
temp_friends.sort()
if max_friends < len(temp_friends):
max_friends = len(temp_friends)
result = " ".join(str(x) for x in temp_friends)
counter += 1
print(max_friends)
print(result)
couples = [(1,2), (2,3), (3,1), (3, 4)]
foo(couples)
应该从图论的角度考虑这项任务(作为显示组中关系的最方便的方法),更具体地说,应该从该理论的派系来考虑。正如维基百科告诉我们的:
那些。我们需要找到什么。让我们回到维基百科:
效率,我们需要的:)。因此,首先,从收到的数据中,我们为组的所有成员编译一个“关系列表”:
对于这样的输入条件:
我们得到:
现在我们开始按照上面的算法处理生成的数据(代码是老老实实从这里偷来的):
我们剩下的就是得到并给出结果:
结论:
像这样的东西。代码未优化,请勿乱扔拖鞋
在这里,我绘制了一个带有控制台输入的变体。目前尚不清楚您已经可以使用什么。有字典和集合。
更正