c语言全排列

怎么编写C语言的全排列啊?急!
最好有详细注释的

基本思想是用回溯法来搜索每一种排列
不过楼主对问题的说明不是很详细,所以我只好写个普适性比较大的了
下面这个程序读取一行字符串,然后对该字符串中的所有字符进行全排列输出
注:输入的字符串不要太长,因为不存在能够在短时间内输出全排列的算法
#include <stdio.h>
#include <string.h>
#include <memory.h>
int m;//记录字符串长度
int n;//记录字符串中的字符种类数
char map[256];//记录是哪几种字符
int count[256];//记录每种字符有多少个

void Make_Map(char *str)//统计字符串的相关信息
{
int s[256];
int i;
memset(s,0,sizeof(s));
memset(count,0,sizeof(count));
m=strlen(str);
while(*str)
{
s[*str]++;
str++;
}
n=0;
for (i=0;i<256;i++)
if (s[i])
{
map[n]=i;
count[n]=s[i];
n++;
}
}

int stack[1000];//递归用的栈,并记录当前生成的排列

void Find(int depth)//递归式回溯法生成全排列
{
if (depth==m)
{
int i;
for (i=0;i<depth;i++) putchar(map[stack[i]]);
putchar('\n');
}
else
{
int i;
for (i=0;i<n;i++)
if (count[i])
{
stack[depth]=i;
count[i]--;
Find(depth+1);
count[i]++;
}
}
}

main()
{
char str[1000];
gets(str);
Make_Map(str);
Find(0);
}
温馨提示:答案为网友推荐,仅供参考
第1个回答  2019-02-11
基本思想是用回溯法来搜索每一种排列
不过楼主对问题的说明不是很详细,所以我只好写个
普适性
比较大的了
下面这个
程序
读取一行
字符串
,然后对该字符串中的所有
字符
进行全排列输出
注:输入的字符串不要太长,因为不存在能够在短时间内输出全排列的
算法
#include
<stdio.h>
#include
<string.h>
#include
<memory.h>
int
m;//记录字符串
长度
int
n;//记录字符串中的字符
种类

char
map[256];//记录是哪几种字符
int
count[256];//记录每种字符有多少个
void
Make_Map(char
*str)//统计字符串的相关信息
{
int
s[256];
int
i;
memset(s,0,sizeof(s));
memset(count,0,sizeof(count));
m=strlen(str);
while(*str)
{
s[*str]++;
str++;
}
n=0;
for
(i=0;i<256;i++)
if
(s[i])
{
map[n]=i;
count[n]=s[i];
n++;
}
}
int
stack[1000];//递归用的栈,并记录当前生成的排列
void
Find(int
depth)//递归式回溯法生成全排列
{
if
(depth==m)
{
int
i;
for
(i=0;i<depth;i++)
putchar(map[stack[i]]);
putchar('\n');
}
else
{
int
i;
for
(i=0;i<n;i++)
if
(count[i])
{
stack[depth]=i;
count[i]--;
Find(depth+1);
count[i]++;
}
}
}
main()
{
char
str[1000];
gets(str);
Make_Map(str);
Find(0);
}

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网