#include #include #include #include #include #include #include using namespace std; #define N 205 int engage[N],n; int boy[N][N],girl[N][N]; void Gale_Shapley(){ queue q; int boyid,girlid; for(int i=1;i<=n;i++){ engage[i]=0; boy[i][0]=1; q.push(i); } while(!q.empty()){ boyid=q.front(); girlid=boy[boyid][boy[boyid][0]++]; if(engage[girlid]==0){ engage[girlid]=boyid; q.pop(); } else{ int i; for(i=1;i<=n;i++) if(girl[girlid][i]==boyid||girl[girlid][i]==engage[girlid]) break; if(girl[girlid][i]==boyid){ q.push(engage[girlid]); engage[girlid]=boyid; q.pop(); } } } } struct dis{ double s; double c; int id; }; struct type{ double c; double x,y,z; dis D[N]; }O[N],I[N]; void cal_dis(int x){ for(int i=1;i<=n;i++){ double d=0; d+=(O[x].x-I[i].x)*(O[x].x-I[i].x); d+=(O[x].y-I[i].y)*(O[x].y-I[i].y); d+=(O[x].z-I[i].z)*(O[x].z-I[i].z); d=sqrt(d); O[x].D[i].s=d; O[x].D[i].id=i; O[x].D[i].c=I[i].c; I[i].D[x].s=d; I[i].D[x].id=x; I[i].D[x].c=O[x].c; } } bool cmp(dis a,dis b){ if(a.s==b.s) return a.c>b.c; return a.s