#include <iostream>
using namespace std;
int visit[50],a[50];
int n;
void DFS(int x) //对n个数进行全排列
{
int j;
if(x==n)
{
for(j=1;j<=x;j++)
{
cout<<a[j]<<" ";
}
cout<<endl;
return ;
}
x++;
for(j=1;j<=n;j++)
{
if(visit[j]==0)
{
visit[j]=1;
a[x]=j;
DFS(x);
visit[j]=0;
}
}
}
void DFS1(int x,int k) //在n个数中任选k个进行排列
{
int j;
if(x==k)
{
for(j=1;j<=x;j++)
{
cout<<a[j]<<" ";
}
cout<<endl;
return ;
}
x++;
for(j=1;j<=n;j++)
{
if(visit[j]==0)
{
visit[j]=1;
a[x]=j;
DFS1(x,k);
visit[j]=0;
}
}
}
void DFS2(int x,int k) //在n个数中任选k个数进行组合
{
int j;
if(x==k)
{
for(j=1;j<=x;j++)
{
cout<<a[j]<<" ";
}
cout<<endl;
return ;
}
x++;
for(j=a[x-1]+1;j<=n;j++)
{
if(visit[j]==0)
{
visit[j]=1;
a[x]=j;
DFS2(x,k);
visit[j]=0;
}
}
}
int main()
{
int i,j,k;
cin>>n;
cout<<"对n个数进行全排列。。。。。。。1"<<endl;
for(i=1;i<=n;i++)
{
if(visit[i]==0)
{
visit[i]=1;
a[1]=i;
DFS(1);
visit[i]=0;
}
}
cout<<endl;
cout<<"在n个数中任选k个数进行排列。。。。。。。。2"<<endl;
for(k=1;k<=n;k++)
{
for(i=1;i<=n;i++)
{
if(visit[i]==0)
{
visit[i]=1;
a[1]=i;
DFS1(1,k);
visit[i]=0;
}
}
}
cout<<endl;
cout<<"在n个数中任选k个数进行组合。。。。。。。。2"<<endl;
for(k=1;k<=n;k++)
{
for(i=1;i<=n;i++)
{
if(visit[i]==0)
{
visit[i]=1;
a[1]=i;
DFS2(1,k);
visit[i]=0;
}
}
}
cout<<endl;
return 0;
}
using namespace std;
int visit[50],a[50];
int n;
void DFS(int x) //对n个数进行全排列
{
int j;
if(x==n)
{
for(j=1;j<=x;j++)
{
cout<<a[j]<<" ";
}
cout<<endl;
return ;
}
x++;
for(j=1;j<=n;j++)
{
if(visit[j]==0)
{
visit[j]=1;
a[x]=j;
DFS(x);
visit[j]=0;
}
}
}
void DFS1(int x,int k) //在n个数中任选k个进行排列
{
int j;
if(x==k)
{
for(j=1;j<=x;j++)
{
cout<<a[j]<<" ";
}
cout<<endl;
return ;
}
x++;
for(j=1;j<=n;j++)
{
if(visit[j]==0)
{
visit[j]=1;
a[x]=j;
DFS1(x,k);
visit[j]=0;
}
}
}
void DFS2(int x,int k) //在n个数中任选k个数进行组合
{
int j;
if(x==k)
{
for(j=1;j<=x;j++)
{
cout<<a[j]<<" ";
}
cout<<endl;
return ;
}
x++;
for(j=a[x-1]+1;j<=n;j++)
{
if(visit[j]==0)
{
visit[j]=1;
a[x]=j;
DFS2(x,k);
visit[j]=0;
}
}
}
int main()
{
int i,j,k;
cin>>n;
cout<<"对n个数进行全排列。。。。。。。1"<<endl;
for(i=1;i<=n;i++)
{
if(visit[i]==0)
{
visit[i]=1;
a[1]=i;
DFS(1);
visit[i]=0;
}
}
cout<<endl;
cout<<"在n个数中任选k个数进行排列。。。。。。。。2"<<endl;
for(k=1;k<=n;k++)
{
for(i=1;i<=n;i++)
{
if(visit[i]==0)
{
visit[i]=1;
a[1]=i;
DFS1(1,k);
visit[i]=0;
}
}
}
cout<<endl;
cout<<"在n个数中任选k个数进行组合。。。。。。。。2"<<endl;
for(k=1;k<=n;k++)
{
for(i=1;i<=n;i++)
{
if(visit[i]==0)
{
visit[i]=1;
a[1]=i;
DFS2(1,k);
visit[i]=0;
}
}
}
cout<<endl;
return 0;
}