//要生成所有排列,就要考虑从当前序列生成下一字典序的序列
char s[51];
bool get(int n)
{
int i,j,k;
for(j=n-1;j>0;j--)//从右向左找到最后一个正序尾的下标
{
if(s[j]>s[j-1])
{
i=j;
break;
}
}
if(!j)return false;//如果没有,则说明当前序列已经是最大字典序的序列
for(k=i+1;k
{
if(s[k]<=s[i-1])continue;
if(s[k]>s[i-1])j=k;
}
char temp=s[j];//交换两数
s[j]=s[i-1];
s[i-1]=temp;
sort(&s[i],&s[n]);//再对i-1后的序列排序
return true;
}
//要找到所有排列,只需先将序列按字典序排好,再反复查找下一序列,直到找到最大字典序的序列
void print(int n)
{
if(get(n))
{
cout<<s<<endl;
print(n);
}
else
return;
}
组合-字典序打印所有排列
最新推荐文章于 2021-02-01 02:22:16 发布