C语言递归实现全排列
2016-12-06 20:57
169 查看
全排列:从m个数据中取出n个数据,输出其全部组合的可能性
例如:ABC中取出2个数据,输出其全部可能性
AB
AC
BA
BC
CA
CB
我们将ABC进行编号,并且存放到一个名为used[]的数组中去,在开始时将其赋值为0表示并没有取出任何一个字符
再某一个子符被取出的时候,我们将他的下标对应的used数组置为1
因为只取两个数字,所以我们用i表示,i<=2时候递归结束
1.在每一次递归函数中,我们要遍历整个字符主串,并且判断used数组的值是否为1,如果是1则证明这个字符已经被用过,则取出下一个字符继续进行判断,直到usd数组中的值为0,则尝试放到子串中去
2.此时子串中已经有一个字符,标记这个字符已经被用过,递归调用自己,若递归函数返回,则证明这个子串已经找到一个答案并且输出,进行下一个未用过字符的放置
3.结束条件 i >= 2
代码:
void FullArray(char *source,int sourceLen, int *used, int i,int count,char *dest)
{
int index = 0;//要对源串进行遍历
if(i >= count){
printf("%s\n", dest);//count标示要取出的字符个数,即子串的长度
}//递归第一就要考虑结束条件
else{
for(index = 0; index < sourceLen; index++){//对主串进行遍历
if(used[index] == 0){//如果主串中的字符没有使用
dest[i] = source[index];
used[index] = 1;//标记成已经使用,然后对下一个位置放置字符
FullArray(source,sourceLen,used,i+1,count,dest);
//当递归调用返回则证明这个位置放置的字符不正确,则
used[index] = 0;//清除放置的标志,并且继续选则下一个字符放置
}
}
}
}
例如:ABC中取出2个数据,输出其全部可能性
AB
AC
BA
BC
CA
CB
我们将ABC进行编号,并且存放到一个名为used[]的数组中去,在开始时将其赋值为0表示并没有取出任何一个字符
再某一个子符被取出的时候,我们将他的下标对应的used数组置为1
因为只取两个数字,所以我们用i表示,i<=2时候递归结束
1.在每一次递归函数中,我们要遍历整个字符主串,并且判断used数组的值是否为1,如果是1则证明这个字符已经被用过,则取出下一个字符继续进行判断,直到usd数组中的值为0,则尝试放到子串中去
2.此时子串中已经有一个字符,标记这个字符已经被用过,递归调用自己,若递归函数返回,则证明这个子串已经找到一个答案并且输出,进行下一个未用过字符的放置
3.结束条件 i >= 2
代码:
void FullArray(char *source,int sourceLen, int *used, int i,int count,char *dest)
{
int index = 0;//要对源串进行遍历
if(i >= count){
printf("%s\n", dest);//count标示要取出的字符个数,即子串的长度
}//递归第一就要考虑结束条件
else{
for(index = 0; index < sourceLen; index++){//对主串进行遍历
if(used[index] == 0){//如果主串中的字符没有使用
dest[i] = source[index];
used[index] = 1;//标记成已经使用,然后对下一个位置放置字符
FullArray(source,sourceLen,used,i+1,count,dest);
//当递归调用返回则证明这个位置放置的字符不正确,则
used[index] = 0;//清除放置的标志,并且继续选则下一个字符放置
}
}
}
}
相关文章推荐
- 递归实例——C语言实现全排列
- 【C语言】递归实现元素的全排列和子集
- 全排列--字典序列、递归方法c语言实现
- 非递归实现不重复序列的全排列(三)
- 非递归实现不重复序列的全排列(一)
- AVL树插入例程非递归实现C语言
- 经典的农夫养牛题目,C语言,递归实现
- 非递归实现不重复序列的全排列(三)
- 简单全排列C递归实现 没考虑重复情况
- C语言递归和非递归实现字符串反转函数char *reverse(char *str)
- 河内之塔(C语言递归实现)
- C语言的快速排序算法代码-递归实现
- 非递归实现不重复序列的全排列(三)
- 归并排序非递归实现C语言
- 迷宫问题--非递归回溯 C语言实现
- 一个C语言实现不含递归的高效快速排序算法
- 八皇后 C语言递归实现
- c语言递归实现的通配符搜索
- 全排列递归实现的讨论
- 非递归实现不重复序列的全排列(二)