#include<stdio.h>
void swap(char *p,int a, int b)
{
char m;
m = p[a];
p[a] = p[b];
p[b] = m;
}
int isSwap(char *p,int a, int b)
{
int i,result;
for(i=a;i<b;i++)
{
if(p[i]==p[b])
{
return 0;
}
}
return 1;
}
void perm(char *p, int k, int m)
{
if(k>m)
{
int i;
for(i=0;i<=m;i++)
{
printf("%c",p[i]);
}
printf("\n");
}
else
{
int i;
for(i=k;i<=m;i++)
{
if(isSwap(p,k,i))
{
swap(p,k,i);
perm(p,k+1,m);
swap(p,k,i);
}
}
}
}
int main()
{
char p[3]="123";
perm(p,0,2);
}
递归全排列:每个字符与后面的字符交换,并且把该字符后面的字符递归全排列。需要注意的是每次递归全排列之后需要把原来的数换回来。而且对于有重复字符的数组要判断字符是否相同,如果有相同的就不交换。
递归全排列
最新推荐文章于 2024-03-16 15:04:10 发布