任意一个字符串的全排列算法(可以有重复的字符)
2002-10-20 09:18
393 查看
////////////////////////////////////////////////////////
// 姓名:梁迅
// 学号:02d470
// 完成时间:10/8/2002
// 文件名:1.cpp
/////////////////////////////////////////////////////////
#define N 21
#include <stdio.h>
#include <string.h>
// 声明。
char d
;
void Permutation(char s[], int i, int l);
void Sort(char s[]);
int count = 0;
void main()
{
char s
;
// 输入源字符串。
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
= '/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;
}
}
// 姓名:梁迅
// 学号:02d470
// 完成时间:10/8/2002
// 文件名:1.cpp
/////////////////////////////////////////////////////////
#define N 21
#include <stdio.h>
#include <string.h>
// 声明。
char d
;
void Permutation(char s[], int i, int l);
void Sort(char s[]);
int count = 0;
void main()
{
char s
;
// 输入源字符串。
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
= '/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;
}
}
相关文章推荐
- 将15位身份证补全为18位身份证的算法示例详解
- C++算法系列之日历生成的算法代码
- 提出一种密钥生成方案
- VB计算农历的算法
- base64编码和解码
- uuencode编码和解码
- 观点:关于游戏系统的规划、设计与实现。
- 从高斯数列谈代码效率
- STL的内观排序(introsort)算法学习笔记
- 计算机编程的24条法规
- yuv 到 32 位 rgb 的 快速转换算法基mmx 实现
- unix内核学习心得(二)
- unix内核学习心得(一)
- 数据对齐问题
- InstallShield内部库函数之21 版本检测函数
- 不当编写SQL语句导致系统不安全
- 文本水印技术与网络安全通信
- 旅行销售员问题的遗传算法实现
- 基于组件的C#农历算法
- 程序员考试补课笔记-第二十天