输入一个字符串,输出字符串的全排列。解释回溯法
#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++;
} 是什么意思,我怎么看不懂。还有谁能简单的说一下回溯法全排列的时候是怎么实现的。
...全文
相关推荐
算法课程的习题
具体实现可能涉及循环和条件判断,根据给定的数字序列调整输出格式。第二份作业关注的是全排列问题。全排列是指将一个有限序列中的所有元素按照不同的顺序排列,输出所有可能的排列组合。
java递归实现N个数全排列输出
在这个场景中,我们将探讨如何使用Java语言,通过回溯法来递归实现全排列的输出。首先,我们需要理解回溯法的基本概念。
生成字符串的全排列,可以用回溯法实现
描述中提到的博客链接虽然没有提供具体内容,但可以推测博主可能详细讲解了如何使用回溯法实现字符串全排列的过程,可能包括具体的代码示例和解释。
使用C语言解决字符串全排列问题
"本文主要介绍了如何使用C语言解决字符串全排列的问题,通过递归算法实现。"在C语言中,解决字符串全排列的问题通常采用递归的方法。递归是一种解决问题的有效策略,它将大问题分解为小问题来解决。在这个
输入一个字符串,输出所有该字符串的组合情况
标题 "输入一个字符串,输出所有该字符串的组合情况" 涉及的主要知识点是字符串处理和算法,特别是组合和排列的生成。


