6.    公司的选择
有n个公司A1,A2,A3,…,An,有n个毕业生S1,S2,S3,…,Sn。每一位毕业生Si都依照他喜欢这n个公司的程度列成一张表,最喜欢的公司排在第一位,最不喜欢的公司排在第n位。同样的,每一个公司也依照它喜欢n个毕业生的程度列成一张表。这样就有了两张表,请写一个程序,读入这两张表,然后将公司和毕业生一一配对,使得:如果Ap与Sq为一对的话,那么第一,对Ap的喜爱表格中排在Sq之前的毕业生而言,他配对的公司在起表格中一定排再Ap之前;第二,对Sq的喜爱表格中排在Ap之前的公司而言,它所配对的毕业生在其表格中一定排在Sq之前。
题解:本题以毕业生为主或以公司为主进行求解都可以,结果一致。
一个一个处理毕业生,随便找一个还没有找到公司的毕业生S,再找出在该毕业生的喜爱表格中一个公司A(按喜爱顺序查找),看看这个公司是不是选了毕业生,如果没有,就与他配成一对。如果这个公司已经选了毕业生,就看看它目前选的毕业生是不是稳定的,也就是说它能否找到自己更喜欢的毕业生。这件事不难做,如果A目前选的毕业生是S1,而在它的喜爱表格中S1排在S之前,那么到目前为止,S1还是它最好的选择,毕业生S就要去寻找他喜欢的下一个公司。但若S排在S1之前,那么原来A和S1的配对就不是最好的了。在这种情况下,就把A和S1的约定解除,让A和S配对。
就这样,毕业生不断的降格以求,而公司不断升高水平,到最后就会达到一个均衡的状况。