穩定婚姻匹配演算法

2021-10-09 15:06:04 字數 2324 閱讀 1387

問題概述

n名男青年和n名女青年參加乙個相親會。經過了解,每名男青年在心目中都對所有女青年作了乙個排序,而每名女青年同樣也對男青年作了排序。問這些男女青年之間怎樣才能進行理想的配對。

給出男青年和女青年的偏好矩陣

演算法求解過程

演算法設計:

[1]根據男性的偏好矩陣來進行遍歷

[2]在男性的偏好矩陣中依次尋找女青年,若該女青年沒有被匹配便先將該女青年匹配給該男青年。

[3]倘若該女青年已經匹配,便在該女青年的偏好矩陣中尋找已經匹配的男青年的優先順序和該男青年的優先順序,倘若該男青年的優先順序更高便將該女青年與該男青年匹配,不然,該男青年繼續向偏好矩陣中依次尋找女青年,直至尋找完。

[4]倘若所有的男性或者所有的女性都已經得到匹配物件,則演算法結束

程式設計要點:

[1]將男青年和女青年的偏好矩陣進行數位化,便於儲存

[2]採用佇列存放未匹配的男青年標識能夠使得演算法更為清晰,明確。

源**

#include

#include

#define n 5

#define maxsize 100

intmain()

;printf

("0-呂布,1-劉備,2-孔明,3-周瑜,4-曹操,5-貂蟬,6-大喬,7-小喬,8-尚香,9-阿醜\n");

printf

("請輸入男生的數量,和女生的數量\n");

scanf

("%d%d"

,&num_n,

&num_v)

;printf

("請輸入男士的心中對於女生的排名矩陣,以序號表示\n");

for(

int i=

0;iprintf

("請輸入女生的心中對於男生的排名矩陣,以序號表示\n");

for(

int i=

0;i//5 6 7 9 8

//5 7 6 8 9

//9 5 7 6 8

//7 6 8 5 9

//7 5 6 8 9

// int man[n][n]=

// ,

// ,

// ,

// ,

//

// };

//4 0 1 3 2

//3 1 2 0 4

//3 2 1 4 0

//0 1 3 2 4

//2 3 4 1 0

// int woman[n][n]=

// ,

// ,

// ,

// ,

//

// };

// 用於存放男性所選取的對應女性的索引

int isppn[maxsize]=;

//size=num_n

// 用於存放女性所選取的對應男性的索引//size=num_v

int isppv[maxsize]=;

for(

int i=

0;i)int nopp[30]

;//記錄男士的索引

int font=

0,rear=0;

//佇列指標

int index;

//索引記錄

int firstpp,afterpp;

//標誌暫存

//將沒有進行匹配的人放入佇列中

for(

int i=

0; i

//遍歷佇列

while

(rear!=font)

else

else

if(woman[man[index]

[k]-num_n]

[j]==index)

}//選取的男性已經是最優,進入下一次迴圈

if(firstpp

else}}

}for

(int t=

0; t

)else

}return0;

}

**略顯粗糙,還望各位指

穩定婚姻匹配

要求按照書中 page 5 的 g s 演算法寫乙個匹配程式 由男方發起邀請 第一行資料表示 man woman 的數目 n 接下來的資料中,第乙個 n n 的資料塊表示 man 的優先列表 另乙個 n n 的資料塊表示 woman 的優先列表 5 man woman 的數目 n 2 1 4 5 3...

穩定匹配問題 穩定婚姻演算法設計

include using namespace std bool finish or not int,int bool current male is better int num,int male rank in female,int current,int chasing int main fo...

Hdu1914穩定婚姻匹配

題意 給出 n 個男生,n 個女生,給出他們對異性的喜歡順序,求乙個穩定的婚姻組合。思路 穩定婚姻匹配裸題 include include include typedef long long ll const int inf 0x3f3f3f3f const int maxn 30 using na...