bool bSingle=false; while(!bSingle){ bSingle=true; for(i=0;i<N;i++){ if(match[i]!=-1) // boy i already have a girlfriend continue; bSingle=false; j=manIndex[i]++; // the jth girl that boy i like most w=man[i][j]; m=choose[w]; // current girl w's boyfriend if(m==-1 || wm[w][i]<wm[w][m]){ // if girl w prefer boy i match[i]=w; choose[w]=i; if(m!=-1) match[m]=-1; } }
时间: 2024-02-14 16:35:10 浏览: 151
C++中各种重载运算符程序
这段代码实现了稳定婚姻匹配算法的过程,其中:
- match[i]表示男性i匹配的女性编号,如果match[i]=-1,则表示男性i还没有匹配到女性;
- choose[w]表示女性w匹配的男性编号,如果choose[w]=-1,则表示女性w目前没有男友;
- man[i]表示男性i对女性的偏好列表,man[i][j]表示男性i对第j个女性的偏好;
- wm[w][i]表示女性w对男性i的偏好程度,其中偏好程度越高,值越小。
这个算法的核心思想是,从男性的角度出发,依次让每个男性向他最喜欢的女性求婚。如果女性当前没有匹配对象,则接受这个男性的求婚;如果女性已经有了男友,但是这个男性比当前男友更优秀,则女性会和这个男性分手,和新的男友在一起。在这个过程中,如果男性i被女性w拒绝了,那么他会继续向他的下一个偏爱的女性求婚,直到找到一个女性接受他的求婚。
这个算法最终的结果是稳定的匹配,即不存在两个男性和女性之间有更好的匹配方案。这个算法的时间复杂度是O(n^2),其中n是男性和女性的数量。
阅读全文