输入一个字符串,输出字符串的全排列。解释回溯法

jingyuge jingyuge 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
#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)//递归式回溯法生成全排列
{
int k=0;
if (depth==m)
{
int i;
for (i=0;i<depth;i++) {putchar(map[stack[i]]);
//printf("%d\n",k);
}
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);
}


这句
//{putchar(map[stack[i]]);
while(*str)
{
s[*str]++;
str++;
} 是什么意思,我怎么看不懂。还有谁能简单的说一下回溯法全排列的时候是怎么实现的。
...全文

相关推荐

评论 13
收藏 已收藏
分享
返回顶部
jingyuge
C语言 70,040 成员 243,237 内容