您的位置:首页 > 其它

组合-字典序打印所有排列

2013-08-17 19:55 169 查看
//要生成所有排列,就要考虑从当前序列生成下一字典序的序列

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
);//再对i-1后的序列排序
return true;
}

//要找到所有排列,只需先将序列按字典序排好,再反复查找下一序列,直到找到最大字典序的序列

void print(int n)
{
if(get(n))
{
cout<<s<<endl;
print(n);
}
else
return;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐