12个高矮不同的人(按从矮到高的顺序编号分别为1~12),排成两排,每排必须是从矮到高排列,而且第二排比对应的第一排的人高,问排列方式有多少种?列出所有方案。 #include<stdio.h> int input[2][6]; int visit[13]; int num; void solve(int k,int n,int m) { int i,j,t; if(k>13) return; if(k==13) { for(i=0;i<2;i++) { for(j=0;j<6;j++) { printf("%3d",input[i][j]); } printf("/n"); } printf("/n"); // getchar(); //查看每个的顺序 num++; return ; } for(i=1;i<13;i++) { if(visit[i]==0) { t=0; if(n==0) { if(m==0) {t=1;} else if(m-1>=0&&i>input[n][m-1]) {t=1;} } else { if(m==0&&i>input[n-1][m]) {t=1;} else if(m-1>=0&&i>input[n][m-1]&&i>input[n-1][m]) {t=1;} } if(t==1) { visit[i]=1; input[n][m]=i; if(m==5) solve(k+1,n+1,0); else solve(k+1,n,m+1); visit[i]=0; } } } } int main() { int i; for(i=1;i<13;i++) visit[i]=0; num=0; solve(1,0,0); printf("%d/n",num); return 0; }