# -*- codeding = utf-8 -*-
# @Time : 2024/11/20 10:02
# @Author : 冯靖华
# @File :n_matach_n.py
# wait数组表示未配对男性
wait = []
for i in range(4):
wait.append(i)
print(wait)
# 男性对女性按喜欢程度顺序排列的二维数组
# m[i][4]表示配对的女性,m[i][5]表示要求婚女性位置
m = [[0, 3, 2, 1, 100, 0],
[2, 0, 1, 3, 100, 0],
[0, 1, 2, 3, 100, 0],
[1, 3, 2, 0, 100, 0]]
# 女性对男性按喜欢程度顺序排列的二维数组
# w[j][4]表示配对的男性
w = [[2, 0, 1, 3, 100],
[0, 3, 2, 1, 100],
[1, 3, 2, 0, 100],
[3, 1, 0, 2, 100]]
# 女性对男性按男生顺序,填写值为喜欢程度的二维数组
w2 = [[0 for _ in range(4)] for _ in range(4)]
for i in range(4):
for j in range(4):
w2[i][w[i][j]] = j
print(w2)
while wait:
# 弹出一个未婚男性
i = wait.pop()
# j为他要求婚的女性
j = m[i][m[i][5]]
# 如果j女性未被求婚,男女互相配对,i男要求婚位置+1
print(f"男{i}要求婚的女性为女{j}")
print(f"求婚前女{j}的列表 w[{j}]: {w[j]}")
if w[j][4] == 100:
w[j][4] = i
m[i][4] = j
# j女性已被求婚,通过w2二维列表,比较原对象和i男的喜欢程度,若
# i男喜欢值小,原对象加入wait数组,i男与j女配对
elif w2[j][i] < w2[j][w[j][4]]:
wait.append(w[j][4])
w[j][4] = i
m[i][4] = j
# i男未配对成功,再加入wait数组
else:
wait.append(i)
m[i][m[i][5]] += 1
print(f"求婚后女{j}的列表 w[{j}]: {w[j]}")
print("最终配对结果:")
for i in range(4):
print(f"男{i+1}配女{m[i][4]+1}")