int main() { int i,j; for(i=0;i<MAXNUM;i++) { m[i]=(int*) malloc(sizeof(int)*MAXNUM); w[i]=(int*) malloc(sizeof(int)*MAXNUM); printf("Enter pref for man[%d] ",i); for(j=0;j<MAXNUM;j++) { scanf("%d",m[i]+j); } printf("Enter pref for women[%d] ",i); for(j=0;j<MAXNUM;j++) { scanf("%d",w[i]+j); } } for(i=0;i<2*MAXNUM;i++) { if(i%2==0) pairings[i]=(i/2); else pairings[i]=-1; } int upid,partner,women; while( (upid=isUnpaired()) >=0) { women=*m[upid]; m[upid]++; if( (partner=isEngaged(women)) >= 0) { if(prefers(women,upid,partner)) { pairings[2*upid+1]=women; pairings[2*partner+1]=0; } else continue; } else { pairings[2*upid+1]=women; // pairings[2*upid]=*women++; } } for(i=0;i<2*MAXNUM;i+=2) { printf("Man[%d]-Women[%d]\n",(i/2),pairings[i+1]); } }
vector<int> MapsMerge::GaleShapleyMatcherStrategy::algGaleShapley(vector<vector<int>> matrix1, vector<vector<int>> matrix2) { if (matrix1.size() != matrix2.size()) { cerr << "Incompatible dimensions of matrices" << endl; return vector<int>(0, 0); } int N = matrix1.size(); vector<int> wMatch(N, -1); vector<bool> mMatched(N, false); int freeCount = N; while (freeCount > 0) { int m; for (m = 0; m < N; m++) if (mMatched[m] == false) break; for (int i = 0; i < N && !mMatched[m]; i++) { int w = matrix1[m][i]; if (wMatch[w] == -1) { wMatch[w] = m; mMatched[m] = true; freeCount--; } else { int m1 = wMatch[w]; if (!prefers(matrix2, w, m, m1)) { wMatch[w] = m; mMatched[m] = true; mMatched[m1] = false; } } } } // Returns a vector with values corresponding to matrix1 and indices - to matrix2 return wMatch; }