提问人:George 提问时间:9/15/2023 最后编辑:George 更新时间:9/15/2023 访问量:38
在 Python 中使用 TWIST 在二分图中查找周期的代码
Code for finding cycles in a bipartite graph with a TWIST in Python
问:
我正在努力寻找一个工作代码来查找二分图中的循环,其中每行代表一个人偏好的列表,所有偏好都包含在一个大列表中。列表代表一个人的偏好。这里的转折点是,在第一次迭代中,我们只首先查看所有人的首选。当找到一个循环时,循环中的玩家将被移除。在第二次迭代中,每个人都指向他们的首选人选,因此,例如,如果人 2 的首选是人 1,但人 1 出现在一个循环中,我们应该查看第二人称、第三人称、第四人称或第二人称的任何偏好。当找不到循环时,代码应该完成,并应列出找到的循环。
我编写了以下代码:
def find_and_remove_cycles(preferences_dict):
def find_match(preferences_dict, person):
for choice in preferences_dict[person]:
if choice not in matched:
matched.add(choice)
return choice
return None
cycles = []
while True:
matched = set()
cycle = None
for person in preferences_dict:
if person not in matched:
while True:
choice = find_match(preferences_dict, person)
if choice is None:
break
if choice in matched:
cycle = [person, choice]
break
matched.add(person)
if not cycle:
break
cycles.append(cycle)
for person in cycle:
del preferences_dict[person]
return cycles
# Example preferences as a dictionary
preferences_dict = {
1: [2, 3, 4],
2: [3, 1, 4],
3: [2, 1, 4],
4: [1, 2, 3]
}
cycles = find_and_remove_cycles(preferences_dict)
print("Cycles found:", cycles)
输出给出了周期 [1,2] 和 [3,4],但周期应该是 [2,3] 和 [1,4]。
有人可以帮我吗,因为我现在已经被困了 2 天......
注意:我在这里使用了字典,正如其他人在 StackOverflow 上建议的那样,但列表中的列表是我更喜欢的。
谢谢!
答: 暂无答案
评论