要安排:3个A国人,3个B国人,3个C国人坐成一排。
要求不能使连续的3个人是同一个国籍。
求所有不同方案的总数?
参考代码:
#include<stdio.h>
int a[10]={0};
int b[9]={0};
int number=0;
int place(int t){
int i,j,count1,count2,count3;
for(i=0;i<=t-2;i++){
count1=count2=count3=0;
for(j=i;j<i+3;j++){
if(b[j]<=3)
count1++;
if(b[j]>3&&b[j]<=6)
count2++;
if(b[j]>6&&b[j]<=9)
count3++;
}
if(count1==3||count2==3||count3==3)
return 0;
}
return 1;
}
void backtrack(int t){
int i;
if(t==9){
// for(i=0;i<9;i++)
// printf("%d\t",b[i]);
// putchar('\n');
number++;
}else{
for(i=1;i<10;i++){
if(a[i]==0){
a[i]++;
b[t]=i;
if(place(t))
backtrack(t+1);
a[i]--;
b[t]=0;
}
}
}
}
int main(){
int i;
for(i=0;i<10;i++)
a[i]=0;
backtrack(0);
printf("%d\n",number);
return 0;
}
运行结果:
答案:283842