#include<bits/stdc++.h>
using namespace std;
int m,n;
bool t[1010]={false};
int a[1010];
int b[1010];
void dfs(int n)//将这个数组中的所有数全部排列
{
if(n==m)
{
for(int i=0;i<n;i++)
{
cout<<b[i]<<' ';
}
cout<<endl;
}
else
{
for(int i=0;i<m;i++)
{
if(!t[i])
{
b[n]=a[i];
t[i]=true;
dfs(n+1);
//n--;
t[i]=false;
}
}
}
}
void dfs1(int n,int l)//将数组中小于数组中的数全部排列
{
if(l==0)
{
for(int i=0;i<n;i++)
{
cout<<b[i]<<' ';
}
cout<<endl;
}
for(int j=0;j<m;j++)
{
if(t[j]==false)
{
b[n]=a[j];
l--;
t[j]=true;
dfs1(n+1,l);
l++;
t[j]=false;
}
}
}
//void dfs2(int l,int f)
//{
// if(l==0)
// {
// for(int i=0;i<n;i++)
// {
// cout<<b[i]<<' ';
// }
// cout<<endl;
// }
// else
// {
// for(int j=f;j<m;j++)
// {
// b[f]=a[j];
// l--;
// dfs2(l,f+1);
// l++;
// }
// }
//}
void dfs2(int l,int f){//去掉重复的经行输出
if(l==0){
//ans+=sushu(he);
for(int i=0;i<n;i++)
{
cout<<b[i]<<' ';
}
cout<<endl;
}
else{
//f++;
for(int i=f;i<m;i++)
{
//he+=a[i];
b[f]=a[i];
l--;
dfs2(l,i+1);
//he-=a[i];
l++;
}
}
}
int main()
{
cin>>m;
cin>>n;
for(int i=0;i<m;i++)
{
cin>>a[i];
}
//dfs(0);
//dfs1(0,n);
dfs2(n,0);
}
关于全排列的你想要的输出,这里都有
最新推荐文章于 2024-08-14 23:48:25 发布