【无标题】

# -*- 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}")

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值