#include <stdio.h>
int Swap(char *a,char *b)
{
char c;
c = *a;
*a = *b;
*b = c;
}
/*
* 递归思想实现全排列
* 对abc进行全排列,那么可以看做:ab的全排列+c和ac的全排列+b和bc的全排列+a三个的组合
*/
void Perm(char *list, int k)
{
//排列list数组中k以后的子串
int i;
if ('\0' == list[k]) {//输出一个排列方式
printf("%s\t",list);
putchar('\n');
}
else
{
for (i=k; list[i]!='\0'; i++) {
Swap (&list[k], &list[i]);
Perm (list, k+1);//全排列右子串
Swap (&list [k], &list [i]);
}
}
}
int main(int argc ,char *argv[])
{
char string[10] = "123";
Perm(string,0);
return 0;
}
分享到:
相关推荐
全排列算法有两个比较常见的实现:递归排列和字典序排列。 (1)递归实现 从集合中依次选出每一个元素,作为排列的第一个元素,然后对剩余的元素进行全排列,如此递归处理,从而得到所有元素的全排列。 (2)字典...
递归思想: 取出数组中第一个元素放到最后,即a[1]与a[n]交换,然后递归求a[n-1]的全排列 1)如果数组只有一个元素n=1,a={1} 则全排列就是{1} 2)如果数组有两个元素n=2,a={1,2} 则全排列是: {2,1}–a[1]与a[2
(一)非递归全排列算法基本思想是: 1.找到所有排列中最小的一个排列P. 2.找到刚刚好比P大比其它都小的排列Q, 3.循环执行第二步,直到找到一个最大的排列,算法结束.下面用数学的方法描述:给定已知序列 P = A1A2A3...
1 递归实现全排列(回溯思想) 1.1 思想 举个例子,比如你要对a,b,c三个字符进行全排列,那么它的全排列有abc,acb,bac,bca,cba,cab这六种可能就是当指针指向第一个元素a时,它可以是其本身a(即和自己进行交换),还...
本程序是用C++实现,主要实现的是一种全排列的思想,具体的细节可以根据程序自己修改。该算法已是最优的递归实现!
输入一个字符串,按字典序打印出该字符...3.回溯法思想 4.一张图和一个运行过程,只能慢慢体会了 <?phpfunction test($str,$start,&$res){ //递归终止条件 if($start==strlen($str)){ $res[]=$str; return; } //
计算机算法设计与实现的实验一 本人觉得它是对递归与分治策略思想最好理解的例子!
2、掌握递归的实现思想 2、输出这几个整数的全排列,每个数之间用半角“,”隔开,中间不要有空格,每个排列单独一行 3、程序一定要有Input、Output、En
(要求全部用哈希思想实现!) 2、链表 实现单链表、循环链表、双向链表 支持增删操作 实现单链表反转 实现两个有序的链表合并为一个有序链表 实现求链表的中间结点 实现:assignment1 【任务2 - 栈、队列与递归】 1、...
3.4 递归与分治思想 3.4..1 基本概念 3.4.2 计算整数的划分数 3.4.3 递归的折半查找算法 3.5 贪心算法思想 3.5.1 基本概念 3.5.2 最优装船问题 3.6 回溯法 3.6.1 基本概念 3.6.2 四皇后问题求解 3.7 数值概率算法 ...