##问题
设计算法生成n个元素{r1,r2,…,rn}的全排列。n<=10。按照字典序排列。
##思路
可以将问题递归的看作两个部分:
1、依次将字符串的每一个按顺序一定到第一位,剩下的长度为(n-1)的字符串看作一个新的串
如:abcd
可以有:
a bcd
b acd
c abd
d abc
2、对新串执行步骤1的操作,直到串的最后一位,输出。
并且每一次的递归会破坏字符串的结构,所以每次递归之后需要把字符串交换回来。
##代码
#include<stdio.h>
#include<string.h>
void xunhuanl(char *s,int i,int j)/*循环左移*/
{
char c;
int k;
c=s[j];
for(k=j-1;k>=i;k--)
{
s[k]=s[k+1];
}
s[i]=c;
}
void xunhuanr(char *s,int i,int j)/*循环右移*/
{
char c;
int k;
c=s[i];
for(k=i;k<j;k++)
{
s[k+1]=s[k];
}
s[j]=c;
}
void f(char *s,int i,int n)
{
int j;
if(i==n-1)
{
printf("%s\n",s);
return;
}
for(j=i;j<n;j++)
{
xunhuanl(s,i,j);
f(s,i+1,n);
xunhuanr(s,i,j);
}
}
int main()
{
char s[12],c;
int i,j,n;
while(~scanf("%s",s))
{
n=strlen(s);
for(i=0;i<n;i++)
for(j=0;j<=n-i-2;j++)
{
if(s[j]>s[j+1])
{
exchange(s,j,j+1);
}
}
f(s,0,n);
}
}
鉏飞祥