稳定婚姻算法

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

稳定婚姻算法

实验目的:

1.理解迭代改进基本原理;

2.掌握稳定婚姻算法;

实验平台:

Microsoft Visual C++ 6.0

实验过程:

1.编程实现稳定婚姻算法:

#include

using namespace std;

void main()

{

int n,i,j;

int ***A=new int**[100];

for(i=0;i<100;i++)

{

A[i]=new int*[100];

for(j=0;j<100;j++)

A[i][j]=new int[2];

}

//输入等级矩阵

cout<<"请输入等级矩阵的行列数:";

cin>>n;

cout<<"请输入"<

for(i=0;i

for(j=0;j

{

cin>>A[i][j][0];

cin>>A[i][j][1];

}

//输出等级矩阵

cout<

for(i=0;i

{

for(j=0;j

cout<

cout<

}

int ***Man=new int**[n],***Woman=new int**[n]; for(i=0;i

{

Man[i]=new int*[3];

Woman[i]=new int*[3];

for(j=0;j<3;j++)

{

Man[i][j]=new int[n];

Woman[i][j]=new int[n];

}

}

for(i=0;i

{

int m=1;

Man[i][1][0]=0;//记录第i个男性是否已经配对

Woman[i][1][0]=0;//记录第i个女性是否已经配对

for(j=0;j

{

for(int k=0;k

{

if(A[i][k][0]==m)

Man[i][0][j]=k;//记录第i个男性的优先列表

if(A[k][i][1]==m)

Woman[i][0][j]=k;//记录第i个女性的优先列表

}

m++;

Man[i][2][j]=0;//记录第i个男性是否已和第j个女性配对

Woman[i][2][j]=0;//记录第i个女性是否已和第j个男性配对}

}

//输出优先列表

for(i=0;i

{

cout<<"第"<

for(j=0;j

cout<

cout<

}

for(i=0;i

{

cout<<"第"<

for(j=0;j

cout<

cout<

}

int m=0,w=0,k=0;

while((m!=n)||(w!=n))

{

m=0,w=0;

if(Man[k][1][0]==0)

{

//cout<<"============================"<

//cout<<"k="<

for(j=0;j

{

int man=Man[k][0][j];//Man[k][0][j]为第k个男性的优先列表的第j个

if(Woman[man][1][0]==0)

{

Man[k][2][man]=1;//第k个男性与第Man[k][0][j]个女性配对

Man[k][1][0]=1;//标记第k个男性已配对

Woman[man][2][k]=1;//第Man[k][0][j]个女性与第k个男性配对

Woman[man][1][0]=1;//标记第Man[k][0][j]个女性已配对

//cout<<"ok"<

break;

}

if(Woman[man][1][0]==1)

{

//cout<<"have a man"<

int o,p,q;

for(int r=0;r

if(Woman[man][2][r]==1) o=r;

//o为第Man[k][0][j]个女性当前伴侣的序号

for(r=0;r

{

if(Woman[man][0][r]==o) p=r;

//p为第o个男性在第Man[k][0][j]个女性优先列表的序号

if(Woman[man][0][r]==k) q=r;

//q为当前配对男性k在第Man[k][0][j]个女性优先列表的序号}

//cout<<"now="<

//测试时输出当前伴侣和当前配对男性的序号

//cout<<"nowp="<

//测试时输出当前伴侣和当前配对男性在女性中的优先列表序号

if(p>q)

{

//交换伴侣

Man[o][1][0]=0;

Woman[man][2][o]=0;

for(int s=0;s

Man[o][2][s]=0;

Man[k][1][0]=1;

Man[k][2][man]=1;

Woman[man][2][k]=1;

//cout<<"change"<

//测试时输出交换伴侣后配对的结果

break;

}

}

相关文档
最新文档