模板:穩定婚姻問題
阿新 • • 發佈:2018-03-23
sizeof body log turn names ont sin case 模板
1 #include <bits/stdc++.h> 2 using namespace std; 3 4 const int N=234; 5 6 int Rank[N][N];//i,j 第i個人心中,第j排名是誰 7 int M[N][N];//i,j j在i心中的排名 8 int boy[N],girl[N],Next[N]; 9 int n,t; 10 11 void solve(){ 12 memset(boy,0,sizeof(boy)); 13 memset(girl,0,sizeof(girl)); 14 for(int i=1;i<=n;i++) Next[i]=1; 15 queue <int> Q; 16 for(int i=1;i<=n;i++) Q.push(i); 17 while(!Q.empty()){ 18 int u=Q.front();Q.pop(); 19 int v=Rank[u][Next[u]++]; 20 if(!girl[v]){ 21 girl[v]=u; 22 boy[u]=v; 23 }24 else if(M[v][girl[v]]>M[v][u]){ 25 Q.push(girl[v]); 26 girl[v]=u; 27 boy[u]=v; 28 } 29 else Q.push(u); 30 } 31 for(int i=1;i<=n;i++) 32 printf(" (%d %d)",i,boy[i]); 33 printf("\n"); 34 } 35 36 int main(){37 scanf("%d",&t); 38 39 for(int k=1;k<=t;k++){ 40 scanf("%d",&n); 41 for(int i=1;i<=n;i++) 42 for(int j=1;j<=n;j++){ 43 scanf("%d",&Rank[i][j]); 44 M[i][Rank[i][j]]=j; 45 } 46 for(int i=n+1;i<=2*n;i++) 47 for(int j=1;j<=n;j++){ 48 scanf("%d",&Rank[i][j]); 49 M[i][Rank[i][j]]=j; 50 } 51 printf("Case %d:",k); 52 solve(); 53 } 54 55 return 0; 56 }
模板:穩定婚姻問題