郭祎老师的慕课地址https://www.icourse163.org/learn/PKU-1001894005?tid=1450413466#/learn/content
按照模拟的方式,给已经按字典序排好的字符串输出其字典序全排列
#include<iostream>
#include<cstring>
using namespace std;
int n;
char alpha[10];
void swap_0(int i,int j)
{
if(i<j){//保持字典序地换顺序
int tmp = alpha[j];
for(int k = j;k>i;k--)
alpha[k] = alpha[k-1];
alpha[i] = tmp;
}
else if(j<i){//恢复
int tmp = alpha[j];
for(int k = j;k<i;k++)
alpha[k] = alpha[k+1];
alpha[i] = tmp;
}
}
void pailie(int k)
{
if(k==n-1){
for(int i = 0;i<n;i++)cout<<alpha[i];
cout<<endl;
}
else{
for(int i = k;i<n;i++){
swap_0(k,i);
pailie(k+1);
swap_0(i,k);
}
}
}
int main(){
//read data
cin>>alpha;
n = strlen(alpha);
pailie(0);
return 0;
}