最简单的方法就是使用递归。例如将一char[n]数组中的字符全排列(假设char[n]数组字符无重复),可把问题理解为:先确定第一个字符,然后将后面n-1个字符全排列,直至只剩一个字符。
以下是偶从某大侠那里复制过来的实现:
void Perm(char *a, int begin, int end) /* 产生begin到end的全排列 */
{
int i;
if(begin == end){ /* 完成一次排列*/
for(i=0; i<=end; i++)
printf("%c",a[i]);
printf(" ");
}
else{
for(i=begin; i<=end; i++){
Swap(a,begin,i);
Perm(a,begin+1,end);
Swap(a,begin,i);
}
}
}
void Swap(char *a, int m, int n)
{
char temp;
temp = a[m];
a[m] = a[n];
a[n] = temp;
}
组合相对复杂些。
以在n个数中选取m(0<m<=n)个数为例,问题可分解为: 1. 首先从n个数中选取编号最大的数,然后在剩下的n-1个数里面选取m-1个数,直到从n-(m-1)个数中选取1个数为止。 2. 从n个数中选取编号次小的一个数,继续执行1步,直到当前可选编号最大的数为m。
实现就不贴了。
|
分享到:
相关推荐
自己写的基于字符的全排列算法,代码简洁,高效,7位数的全排列都是秒排!用到了广度优先排列,深度优先搜索和几个递归,唯一没完成的是退出时释放内存,呵呵,破解密码时超有用的哟,,
全排列算法
基于全排列算法的完整代码解析,可供理解搜索的技巧,有很高的使用价值
全排列算法: 比如字符串abc,全排列结果为abc,acb,bac,bca,cba,cab。
全排列算法详细解析(完整版)
使用递归实现的全排列算法,输出所有的全排列。 各种主流程序设计语言实现!
全排列算法 实例 一种实现了n个数全排列的算法 全排列算法 实例 一种实现了n个数全排列的算法
实现全排列组合的算法,供大家学习与参考。在需要对排列组合做差异分析的时候可以直接使用。例如:几个正则式的不同排列组合对匹配效果的影响
实现了字典序法、递增进位制数法、递减进位制数法、邻位对换法四种全排列算法。全排列算法有很多种,这里只是其中的一些,可以调试运行比较一下各种算法的效率。(该代码为初级版本,注重算法的实现,在交互方面需要...
利用中介数实现全排列算法,采用java实现。
交换算法得到全排列,排列组合的全排列算法(交换算法)
组合数学中六种全排列算法详细解析,对于自学很有帮助哦,这里没有代码。
实现了全排列算法,每个元素用char类型表示,用递归算法,比较简洁实用。
用objective-c实现全排列算法,用数组来保存全排列排列的结果
主要介绍了Python字符串的全排列算法,结合实例形式较为详细的总结分析了Python字符串全排列的常见操作技巧,需要的朋友可以参考下
全排列算法设计分析.ppt
大一时候使用javascript写的全排列算法演示(分为回溯法演示和交换法演示),既可以用来学习javascript,又可以用来加深对全排列算法的理解,有需要的朋友们可以下载~