关于一个python题在算法编写上的问题

问题:
有几个人参与抽签,决定前往哪个城市旅行。如果对自己抽到的不满意,可以私下进行交换。
他们通过问卷填写了希望交换的申请,汇总为一个excel表格。
1.做出最优方案,尽可能满足所有人的要求。
2.优先级:使每个人能换到意向的城市>意`向城市1>意.向城市2>意·向城市3
3.在无法满足所有人的要求的前提下,按照申请时间的先后顺序,优先考虑。
4.经过交换后,每个城市前往的人数不变
5.输出:序号,交换后的城市编号(或显示“保持不变”)
6.实际的城市和人数不仅限于示例表格所呈现的。
excel示例输入:

序号申请时间抽到城市意`向城市1意向.城市2意·向城市3
103231430001234
203231430302341
303231431003412
403231432004123
503231433001324
603231434002413
703231435003214
803231436004312
903231437001243
1003231438002431

主要在纠结算法应该如何编写。
如果只有1个意`向城市的话,就非常容易。
但是有3个意·向城市,且要尽可能满足所有人的需求的话,存在非常多的可能性。
要求做出最佳方案的话还需要尽可能满足意向城市1的需求。
百度了一下没有类似的解决方案,目前也没有比较好的思路,希望给些建议。
如果可以的话,希望提供部分代码,谢谢!