#include <iostream>
using namespace std;
void quanpai(int begin,int end,int aa[])
{
if(begin==end)
{
for(int i=0;i<end;i++)
{
cout<<aa[i];
}
cout<<endl;
}
else
for(int i=begin;i<end;i++)
{
swap(aa[begin],aa[i]);
quanpai(begin+1,end,aa);
swap(aa[i],aa[begin]);
}
}
int main()
{int aa[]={1,2,3,4,5};
quanpai(0,5,aa);
cout << "Hello world!" << endl;
return 0;
}
第二种,不换位置,我们上锁
#include <iostream>
using namespace std;
int n;
int aa[3]={1,2,3};
int bb[3];
int s[3]={0};
void dfs(int a)
{
if(a==3)
{
for(int i=0;i<3;i++)
{
cout<<bb[i];
}
cout<<endl;
return;
}
else
{
for(int i=0;i<3;i++)
{
if(!s[i])
{
bb[a]=aa[i];
s[i]=1;
dfs(a+1);
s[i]=0;
}
}
}
}
int main()
{
dfs(0);
return 0;
}
思路不太一样,但是大抵相同,都是以输出数组的位号位定位,给每一位选择一个数,第一种是通过换位将不同的数换在第一位,而第二种是从原数据中选数,选中了之后上锁,第二位再选的时候就不能选这个数了。第在进行第二次选择时候就已经把第一个数排除了,从剩下的两个里面选择。