问题:3个A、3个B、3个C,输出满足条件:相邻的字母不能重复这样的序列
#include<iostream.h>
char c[9]; //存储9个人的座位顺序
const char choice[3] = {'A','B','C'};
//判断相邻的两个字符是否相同
bool IsBetweenEqual(const char* c)
{
for(int i = 0;i < 8;i++)
{
if(c[i] == c[i+1])
{
return false;
}
}
return true;
}
//判断每个字符是否都是三个
bool isThree(const char* c)
{
int ANum = 0,BNum = 0,CNum = 0;
for(int i = 0;i < 9;i++)
{
switch(c[i])
{
case 'A': ANum++; break;
case 'B': BNum++; break;
case 'C': CNum++; break;
}
}
if(ANum==3 && BNum==3 && CNum==3)
return true;
return false;
}
//回溯列举出9个字符所有的排列方案
void dfs(int start)
{
if(start == 9)
{
if(IsBetweenEqual(c) && isThree(c)) //如果这九个每两个相邻的字符都不相同,就打印出这9个字符
{
for(int i = 0;i < 9;i++)
{
cout<<c[i];
}
cout<<endl;
}
return;
}
for(int i = 0;i < 3;i++)
{
c[start] = choice[i];
dfs(start+1);
}
}
//主函数
void main()
{
dfs(0);
}
/*
ABABCACBC
ABABCBCAC
ABACABCBC
ABACACBCB
ABACBACBC
ABACBCABC
ABACBCACB
ABACBCBAC
ABACBCBCA
ABCABACBC
ABCABCABC
ABCABCACB
ABCABCBAC
ABCABCBCA
ABCACABCB
ABCACBABC
ABCACBACB
ABCACBCAB
ABCACBCBA
ABCBABCAC
ABCBACABC
ABCBACACB
ABCBACBAC
ABCBACBCA
ABCBCABAC
ABCBCABCA
ABCBCACAB
ABCBCACBA
ABCBCBACA
ACABABCBC
ACABACBCB
ACABCABCB
ACABCBABC
ACABCBACB
ACABCBCAB
ACABCBCBA
ACACBABCB
ACACBCBAB
ACBABACBC
ACBABCABC
ACBABCACB
ACBABCBAC
ACBABCBCA
ACBACABCB
ACBACBABC
ACBACBACB
ACBACBCAB
ACBACBCBA
ACBCABABC
ACBCABACB
ACBCABCAB
ACBCABCBA
ACBCACBAB
ACBCBABAC
ACBCBABCA
ACBCBACAB
ACBCBACBA
ACBCBCABA
BABACACBC
BABACBCAC
BABCABCAC
BABCACABC
BABCACACB
BABCACBAC
BABCACBCA
BABCBACAC
BABCBCACA
BACABACBC
BACABCABC
BACABCACB
BACABCBAC
BACABCBCA
BACACABCB
BACACBABC
BACACBACB
BACACBCAB
BACACBCBA
BACBABCAC
BACBACABC
BACBACACB
BACBACBAC
BACBACBCA
BACBCABAC
BACBCABCA
BACBCACAB
BACBCACBA
BACBCBACA
BCABABCAC
BCABACABC
BCABACACB
BCABACBAC
BCABACBCA
BCABCABAC
BCABCABCA
BCABCACAB
BCABCACBA
BCABCBACA
BCACABABC
BCACABACB
BCACABCAB
BCACABCBA
BCACACBAB
BCACBABAC
BCACBABCA
BCACBACAB
BCACBACBA
BCACBCABA
BCBABACAC
BCBABCACA
BCBACABAC
BCBACABCA
BCBACACAB
BCBACACBA
BCBACBACA
BCBCABACA
BCBCACABA
CABABACBC
CABABCABC
CABABCACB
CABABCBAC
CABABCBCA
CABACABCB
CABACBABC
CABACBACB
CABACBCAB
CABACBCBA
CABCABABC
CABCABACB
CABCABCAB
CABCABCBA
CABCACBAB
CABCBABAC
CABCBABCA
CABCBACAB
CABCBACBA
CABCBCABA
CACABABCB
CACABCBAB
CACBABABC
CACBABACB
CACBABCAB
CACBABCBA
CACBACBAB
CACBCABAB
CACBCBABA
CBABABCAC
CBABACABC
CBABACACB
CBABACBAC
CBABACBCA
CBABCABAC
CBABCABCA
CBABCACAB
CBABCACBA
CBABCBACA
CBACABABC
CBACABACB
CBACABCAB
CBACABCBA
CBACACBAB
CBACBABAC
CBACBABCA
CBACBACAB
CBACBACBA
CBACBCABA
CBCABABAC
CBCABABCA
CBCABACAB
CBCABACBA
CBCABCABA
CBCACABAB
CBCACBABA
CBCBABACA
CBCBACABA
*/