Python程序计算不满友人人数
假设我们有一个n(偶数)个不同朋友的偏好列表。对于每个人i,偏好[i] 持有已按偏好排序的朋友列表。因此,在列表中较早的朋友比列表中较晚的朋友更受欢迎。每个列表中的朋友按整数0到n-1进行编号。所有的朋友被分成不同的对。其中pairs[i] = [xi, yi] 表示xi 和yi 相配对和/或yi和xi相匹配。但是,如果x与y配对,存在一个友人u也与v配对但 –
- x 更喜欢u而不是y, 和
- u 更喜欢x而不是v。
我们必须找到不满意朋友的数量。
所以,如果输入如下:preferences = [[1, 2, 3], [3, 2, 0], [3, 1, 0], [1, 2, 0]] pairs = [[0, 1], [2, 3]], 那么输出将是2,因为第一个朋友不高兴是因为人1与人0配对,但是喜欢人3而不是人0,人3喜欢人1而不是人2。朋友3很不高兴是因为人3与人2配对,但是喜欢人1而不是人2,人1喜欢人3而不是人0。
要解决此问题,我们将遵循以下步骤−
- 图形:= 空的邻接列表以制作图形
- 对于每个对(s, e)中的(pair),执行以下操作
- 对于偏好[s]中的每个pref,执行以下操作
- 如果pref与end相同,则
- 退出循环
- 图[s, pref] := 1
- 对于偏好 [e]中的每个pref,执行以下操作
- 如果 pref 与 start 相同,则
- 退出循环
- 图[ e , pref ] := 1
- 对于偏好[s]中的每个pref,执行以下操作
- 不满的 := 0
- 对于(pairs)中的每个对(s, e),执行以下操作
- 对于图[s]中的每个pref,执行以下操作
- 如果图
[pref][s]
不为空,则 - 不快乐 := 不快乐 + 1
- 退出循环
- 如果图
- 对于[(end)]中的每个pref,执行以下操作
- 如果图
[pref][e]
不为空,则 - 不满意 := 不满意 + 1
- 退出循环
- 如果图
- 对于图[s]中的每个pref,执行以下操作
- 返回不满意
例子
让我们看一下以下实现,以更好地理解−