Gale-Shplay算法(約會匹配問題)


 1 int womanPrefer[10][10],manPrefer[10][10];
 2 //womanPrefer[i][j]:i號女人第j喜歡的男人編號
 3 //manPrefer[i][j]:i號男人第j喜歡的女人編號
 4 vector<int>& GaleShplay(){
 5     int DatedMan=0;//已經脫單的男人
 6     int womanDated[10]={0};//womanDated[i]:第i個女人約會的對象(如果還沒有對象默認是-1)
 7     int manDated[10]={0};//manDated[i]:第i個男人約會的對象(如果還沒有對象默認是-1)
 8     for(int i=0;i<10;++i){
 9         womanDated[i]=-1;
10         manDated[i]=-1;
11     }
12     int womanPreferManNumber[10][10];//womanPreferManNumber[i][j]:i號女人對j號男人的排名(即i號女人喜歡的所有男人中,j號男人排名
13     //womanPreferManNumber[i][j]位)
14     for(int i=0;i<10;++i){
15         for(int j=0;j<10;++j){
16             womanPreferManNumber[i][womanPrefer[i][j]]=j;
17         }
18     }
19     for(int i=0;i<10;++i){
20         //第i輪內讓所有男人對各自第i喜歡的女人告白,如果被告白的女人還沒有對象就接受;否則將其與已有的約會對象做比較,
21         //如果女人更喜歡新對象,則劈腿;不然則保持原約會關系
22         for(int j=0;j<10;++j){
23             if(manDated[j]!=-1){    //已經約會的男人直接跳過
24                 continue;
25             }
26             int likedWoman=manPrefer[j][i]; //j號男人第i喜歡的女人
27             if(womanDated[likedWoman]==-1){//該女人還沒有對象
28                 DatedMan+=1;
29                 womanDated[likedWoman]=j;   //likedWoman和j進行約會
30                 manDated[j]=likedWoman;     //likedWoman和j進行約會
31             }
32             else{//該女人已經有對象,則進行比較
33                 int existedDatedMan=womanDated[likedWoman]; //該女人正在約會的男人編號
34                 if(womanPreferManNumber[existedDatedMan]>womanPreferManNumber[j]){//女人更喜歡j(womanPreferManNumber值小的說明排名靠前)
35                     int lvmaozi=womanDated[likedWoman];//前男友
36                     womanDated[likedWoman]=j;//劈腿
37                     manDated[j]=likedWoman;//劈腿
38                     manDated[lvmaozi]=-1;   //被綠
39                 }
40             }
41         }
42         if(DatedMan>=10){   //都有對象了就退出
43             break;
44         }
45     }
46 }

注意上述代碼未經過驗證!

Gale-Shplay算法的偽代碼:

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM