稳定婚姻问题时间:2022-12-09 09:53:20//稳定婚姻问题a1[N][N],a2[N][N]为优先秩矩阵 int mm[N],mf[N],ms[N]; int match(int u){ int i,j,k,p=n+1; for(i=1;i<=n;i++) if(a1[u][i]<p&&ms[u]<=a1[u][i]){ k=i; p=a1[u][i]; } if(mf[k]==0){ ms[u]=a1[u][k]; mm[u]=k; mf[k]=u; return 0; } ms[u]++; return k; } int adjust(int j,int k){ int temp; if(a2[j][k]<a2[mf[k]][k]){ temp=mf[k]; ms[j]=a1[j][k]; mm[j]=k; mf[k]=j; ms[temp]++; return temp; } return j; } void sm(int n){ int i,j,k; memset(mm,0,sizeof(mm)); memset(mf,0,sizeof(mf)); for(i=1;i<=n;i++) ms[i]=1; for(i=1;i<=n;i++){ j=i; k=match(j); while(k!=0){ j=adjust(j,k); k=match(j); } } }