排座位

来源:互联网 发布:养树的软件 编辑:程序博客网 时间:2024/05/17 03:20

要安排: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

0 0