全排列生成算法
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;
}运行结果:
原理:把第一位换掉,排列肯定是不同的...不好描述,直接上代码吧。#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;
}运行结果: