您的位置:首页 > 其它

全排列

2015-08-06 21:27 281 查看
#include<stdio.h>

void premutation(int pos,int n);

char c[100];

char used[200];

char pre[100];

int main()

{

int n;

scanf("%d",&n);

getchar();

gets(c);

premutation(0,n);

return 0;

}

void premutation(int pos,int n)

{

if(pos == n)

{

for(int i=0;i<n;i++)

printf("%c ",pre[i]);

printf("\n");

return ;

}

for(int i=0;i<n;i++)

{

if(used[i]==0)

{

pre[pos]=c[i];

used[i]=1;

premutation(pos+1,n);

used[i]=0;

}

}

return ;

}

#include<stdio.h> //全排列去重

#include<string.h>

void premutation(int pos,int n);

char c[100];

int used[200];

char pre[100];

int main()

{

int n;

scanf("%d",&n);

getchar();

gets(c);

for(int i=0;i<strlen(c);++i)

used[c[i]]++; //统计相同字符的个数

premutation(0,n);

return 0;

}

void premutation(int pos,int n)

{

if(pos == n)

{

for(int i=0;i<=n;i++)

printf("%c ",pre[i]); //输出全排列后的

printf("\n");

return ;

}

for(int i=65;i<=122;i++)

{

if(used[i]>0)

{

pre[pos]=i;

used[i]--;

premutation(pos+1,n);

used[i]++;

}

}

return ;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: