任意一个字符串的全排列算法(可以有重复的字符)

王朝vc·作者佚名  2006-01-08
窄屏简体版  字體: |||超大  

////////////////////////////////////////////////////////

// 姓名:梁迅

// 学号:02d470

// 完成时间:10/8/2002

// 文件名:1.cpp

/////////////////////////////////////////////////////////

#define N 21

#include <stdio.h>

#include <string.h>

// 声明。

char d[N];

void Permutation(char s[], int i, int l);

void Sort(char s[]);

int count = 0;

void main()

{

char s[N];

// 输入源字符串。

printf("请输入一个不超过20个字符的字符串:");

gets(s);

// 排序,排列并输出。

Sort(s);

Permutation(s, 0, strlen(s));

}

// 运用递归输出各种排列。

void Permutation(char s[], int i, int n)

{

int j;

char temp;

for(j = 0; j < n; j ++)

if(s[j] == s[j - 1])

;

else if(s[j] != '#')// 如果标志为不为'#',

{

d[i] = s[j];// 把源串的一个字符赋给目的串。

temp = s[j];

s[j] = '#';

if(i == n - 1)

{

d[n] = '\0';

printf("%d:", ++ count); // 打印出其结果。

puts(d);

}

else Permutation(s, i + 1, n);// 递归调用。

s[j] = temp;// 回溯。

}

}

// 排序。

void Sort(char s[])

{

int n = strlen(s);

int i, j;

char temp;

for(i = 0; i < n - 1; i ++)

for(j = i + 1; j < n; j ++)

if(s[i] > s[j])

{

temp = s[i];

s[i] = s[j];

s[j] = temp;

}

}

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
 
© 2005- 王朝網路 版權所有 導航