康拓展开的应用就是计算一个状态在全排列状态中的位置问题
例如ans[5]={1,2,3,4};
然后把ans全排列以后生成一个表,这时你想求{2,4,3,1}这个状态在全排列中处于第几个,就可以用康拖展开
int fac[]={1,1,2,6,24,120,720,5040,40320,362880};
int cantor(int s[]) {//先把s的所有情况打个表,然后再计算s这个数列的cantor值,在表中找到对应位置
int sum=0;
for(int i=0;i<9;i++) {
int num=0;
for(int j=i+1;j<9;j++) {
if(s[j]<s[i])num++;
}
sum+=(num*fac[8-i]);
}
return sum+1;
}