#include<stdio.h>
#define N_ABC 3
#define N_XYZ 3
typedef const int BiteERoor;
typedef BiteERoor berMan;
typedef BiteERoor berWuman;
berMan A=0,B=1,C=2;
berWuman X=0,Y=1,Z=2;
const int N = 3;
typedef int boolean;
boolean true=1,false=0;
typedef boolean *(BEROOR[N_ABC]);
int is_AllxOR(boolean const,boolean const,boolean const);
int main(int argc,char**argv){
//有ABC三男和XYZ三女,她们搞配对;
int i,j,k,sum[3],z,z1;
int so_k = 0;
char xyz[N_XYZ]={‘X’,‘Y’,‘Z’};
char abc[N_ABC]={‘A’,‘B’,‘C’};
boolean MansWu[N_XYZ][N_ABC]={{-1,-1,-1},{-1,-1,-1},{-1,-1,-1}};
//boolean MansWuCObj[N_XYZ][N_ABC]={{0,0,0},{0,0,0},{0,0,0}};
boolean X_ABC[N_ABC]={-1,-1,-1},Zo1=0;
boolean Y_ABC[N_ABC]={-1,-1,-1},Zo2=0;
boolean Z_ABC[N_ABC]={-1,-1,-1},Zo3=0;
BEROOR p[N_XYZ]={X_ABC,Y_ABC,Z_ABC};
boolean boloMan[N_XYZ];
boolean *pz[N_XYZ]={&Zo1,&Zo2,&Zo3};
//其中 A 说和 X ; X 说和 C;C 说和 Z;
//已知都是假的配对
MansWu[X][A] = false;//A 说和 X
MansWu[X][C] = false;//X 说和 C
MansWu[Z][C] = false;//C 说和 Z
//已知配对是1对1配对,先从X检查关系。。
z1 = 0;
for(i=X;i<N;i++){
z = 0;
sum[z] = 0;
for(j=A;j<N;j++){
if(MansWu[i][j]!=false){
sum[z]=j,MansWu[i][j]=true;
(*p)[i][z] = j;
(*pz)[i] = ++z;
printf("%d::%d:%d;\n",i,j,sum[z-1]);
}
}
if(z==1){
for(j=X;j<N;j++)MansWu[j][sum[0]]=(j==i)?true:false;
}
}
for(i=0;i<N;i++){
z = 0;
for(j=0;j<N;j++){
if(MansWu[i][j]==true)
(*p)[i][z++] = j;
}
(*pz)[i] = z;
}
for(i=0;i<(*pz)[0];i++){
printf("%d-%d:%d;\n",1,(*pz)[0],i);
boloMan[0] = (*p)[0][i];
// MansWuCObj[0][boloMan[0]] = true;
for(j=0;j<(*pz)[1];j++){
printf("%d-%d:%d;\n",2,(*pz)[1],j);
boloMan[1] = (*p)[1][j];
if(!is_AndOrMar(boloMan[0],boloMan[1]))continue;
// MansWuCObj[1][boloMan[1]] = true;
for(k=0;k<(*pz)[2];k++){
printf("%d-%d:%d;\n",3,(*pz)[2],k);
boloMan[2] = (*p)[2][k];
if(!is_AndOrMar(boloMan[1],boloMan[2]))continue;
if(!is_AndOrMar(boloMan[0],boloMan[2]))continue;
if(is_AllxOR(boloMan[0],boloMan[1],boloMan[2])==true){
printf("输出结果:\n");
printf("%c :%c ::在一起;\n",xyz[0],abc[boloMan[0]]);
printf("%c :%c ::在一起;\n",xyz[1],abc[boloMan[1]]);
printf("%c :%c ::在一起;\n",xyz[2],abc[boloMan[2]]);
}
}
}
}
for(i=0;i<N;i++){
for(j=0;j<N;j++){
printf("%d",MansWu[i][j]);
putchar(' ');
}
putchar('\n');
}
return 0;
}
int is_AndOrMar(boolean const a,boolean const b){
int xAnd_mr = true;
if(a == b)return false;
return xAnd_mr;
}
int is_AllxOR(boolean const a,boolean const b,boolean const c){
int xAll_or = true;
if(!is_AndOrMar(a,b))return false;
if(!is_AndOrMar(a,c))return false;
if(!is_AndOrMar(c,b))return false;
return xAll_or;
}