输入一组数字(可能包含重复数字),输出其所有的排列方式。输入数组长度 [0,6]。
#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
const int N = 1010;
int a[N];
int path[N];
bool st[N];
int n;
void dfs(int u,int start)
{
if(u==n)
{
for(int i=0;i<n;i++)
cout<<path[i];
cout<<endl;
}
else
for(int i=start;i<n;i++)
{
if(!st[i])
{
st[i]=true;
path[i]=a[u];
if(u+1<n&&a[u+1]!=a[u])
dfs(u+1,0);
else
dfs(u+1,i+1);
st[i]=false;
}
}
}
int main()
{
while(1)
{
cin>>a[n];
if(a[n]==0)
break;
n++;
}
sort(a,a+n);
dfs(0,0);
return 0;
}