算法题:实现一个整型数组的全排列,
void perm(int list[], int k, int m)
参数说明:list,数组;k开始位置,m个数。
用递归算法实现代码如下:
void perm(int list[], int k, int m)
{
if ( k==m )
{
copy(list,list+m,ostream_iterator<int>(cout," "));
cout<<endl;
return;
}
for (int i=k; i<m; i++) // 注意这里不是for (int i=k; i<=m; i++),否则会出现乱数据。
{
swap(list[k],list[i]);
perm(list,k+1,m);
swap(list[k],list[i]);
}
}
int main()
{
int List[] = {1,2,3} ;
perm(List, 0, sizeof(List)/sizeof(int));
return 0;
}
测试结果:
当list是{1,2,3,4} 时,
1 2 3 4
1 2 4 3
1 3 2 4
1 3 4 2
1 4 3 2
1 4 2 3
2 1 3 4
2 1 4 3
2 3 1 4
2 3 4 1
2 4 3 1
2 4 1 3
3 2 1 4
3 2 4 1
3 1 2 4
3 1 4 2
3 4 1 2
3 4 2 1
4 2 3 1
4 2 1 3
4 3 2 1
4 3 1 2
4 1 3 2
4 1 2 3
当list是{1,2,3} 时
1 2 3
1 3 2
2 1 3
2 3 1
3 2 1
3 1 2
分享到:
相关推荐
二维数组全排列生成方法,采用递归方法实现,10*24大概用时30min,有待进一步改进
全排列算法有两个比较常见的实现:递归排列和字典序排列。 (1)递归实现 从集合中依次选出每一个元素,作为排列的第一个元素,然后对剩余的元素进行全排列,如此递归处理,从而得到所有元素的全排列。 (2)字典...
自己写的基于字符的全排列算法,代码简洁,高效,7位数的全排列都是秒排!用到了广度优先排列,深度优先搜索和几个递归,唯一没完成的是退出时释放内存,呵呵,破解密码时超有用的哟,,
php全排列递归算法代码,需要的朋友可以参考下
用C语言写的一个递归全排列算法,附有较为详细的注释。
使用递归实现的全排列算法,输出所有的全排列。 各种主流程序设计语言实现!
全排列递归算法,在VC下调试OK,递归算法简单快捷,大家理解理解
用c语言实现对一个动态数组的全排列,其中保存生成的全排列用了一个二维指针,求全排列用的递归的方法,代码在vc++6.0下调试通过,并附有详细注释。
JAVA递归实现全排列算法,含实现源代码,如a、b、c、d的全排列为: abcd abdc acbd acdb adcb adbc bacd badc bcad bcda bdca bdac cbad cbda cabd cadb cdab cdba dbca dbac dcba dcab dacb dabc
主要介绍了JavaScript实现数组全排列、去重及求最大值算法,结合实例形式分析了JavaScript针对数组的递归、遍历、排序等相关操作技巧,需要的朋友可以参考下
这是一个递归完成全排列的算法,使用的是C++进行编程,希望能帮到你~
Java数组(冒泡,选择,插入希尔)递归算法的复杂度
算法思想——递归与分治 算法思想——递归与分治
排列:从n个元素中任取m个元素,并按照一定的顺序进行排列,称为排列; 全排列:当n==m时,称为全排列;...(2)出口:如果只有一个元素的全排列,则说明已经排完,则输出数组; (3)不断将每个元素放作第一个元素,然
主要介绍了C#通过yield实现数组全排列的方法,以实例形式较为详细的分析了全排列的概念及C#的实现技巧,具有一定参考借鉴价值,需要的朋友可以参考下
c语言版的猴子吃桃的源程序,用不同的方法求解桃子的总数。其中有递归算法,数组算法,链表算法。
实现了全排列算法,每个元素用char类型表示,用递归算法,比较简洁实用。
.net 递归算法.net 递归算法.net 递归算法.net 递归算法.net 递归算法.net 递归算法.net 递归算法.net 递归算法
全排列-非递归算法(适合动态的新元素加入重新输出全排列-本程序以1到6的数字输出为例)