#include
#include
inline bool Judge9(int *ANS,int ans)
{
bool flag(false);
switch(ANS[8])
{
case 2: if(ans==2||ans==3||ans==5||ans==7) flag=true; break;
case 3: if(ans==1||ans==2||ans==6) flag=true; break;
case 4: if(ans==1||ans==4||ans==9) flag=true; break;
case 5: if(ans==1||ans==8) flag=true; break;
case 6: if(ans==5||ans==10) flag=true; break;
}
if(flag) return true;
return false;
}
bool Judge1(int*ANS,int n)
{
for(int i = 0; i < n;++i)
if( ANS[i] == 3 ) return false;
return true;
}
bool Judge2(int*ANS,int i)
{
for(int k = 0; k < 9; ++k)
if( i!=k && ANS[k]==ANS[k+1]) return false;
return true;
}
int ANS[10]={0},Q3[5]={1,2,4,7,6},cnt[5];
void DFS(int Current)
{
if( Current == 11 )
{
for(int x = 0; x < 10; ++x) ++cnt[ANS[x]-2];
if( (Judge1(ANS,ANS[0]-1)&&ANS[ANS[0]-1]==3)
&&((ANS[ANS[1]-1]==ANS[ANS[1]])&&Judge2(ANS,ANS[1]-1))
&&(ANS[2]==ANS[Q3[ANS[2]-2]-1])&&((ANS[3]-2)==cnt[0])&&(ANS[12-ANS[4]-1]==ANS[4])
&&((ANS[5]>5) ? !(cnt[0]==cnt[1]||cnt[0]==cnt[2]||cnt[0]==cnt[3]||cnt[0]==cnt[4]):cnt[0]==cnt[ANS[5]-1])
&&((6-ANS[6])==abs(ANS[7]-ANS[6]))&&(ANS[7]==(cnt[0]+cnt[4]))
&&Judge9(ANS,cnt[1]+cnt[2]+cnt[3]))
{
for(int i=0;i<10;++i)
printf("%c%c",ANS[i]-2+'A',i==9?'\n':',');
return ;
}
for(int x = 0; x < 5; ++x) cnt[x] = 0;
return ;
}
for(int k = 2; k <= 6; ++k, ANS[Current-1] = 0)
{
if( ! ANS[Current-1] ) ANS[Current-1] = k;
DFS( Current + 1 );
}
}
int main()
{ // 2 代表 A, 3 代表 B , 以此类推
for(int i = 2; i<=6; ++i) { ANS[0] = i; DFS(2); }
system("pause");
return 0;
}
DFS