您的位置:首页 > 其它

全排列生成算法

2018-03-27 22:43 232 查看
一、手工实现(排列无顺序)
原理:把第一位换掉,排列肯定是不同的...不好描述,直接上代码吧。#include <iostream>
#include <algorithm>
using namespace std;

void print(int a[], int n) //输出某个序列
{
for(int i = 0; i <= n; ++i)
cout<<a[i]<<' ';
cout<<endl;
}

void perm(int a[], int low, int high)
{
if(low == high) print(a, high);
else
{
for(int i = low; i <= high; ++i)
{
swap(a[i],a[low]);
perm(a,low+1,high);
swap(a[i],a[low]);
}
}
}

int main()
{
int num[4] = {1,2,3,4};
perm(num,0,3);
return 0;
}运行结果:



二、C++STL实现 next_permutation( array.begin(),array.end() )
按字典序获得当前排列的下一个排列
代码:#include <iostream>
#include <algorithm>
using namespace std;

int main()
{
int num[4] = {1,2,3,4};
do
{
for(int i=0;i<4;++i)
cout<<num[i]<<' ';
cout<<endl;
}while(next_permutation(num,num+4));

return 0;
}运行结果:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: