题号: 10125
时限:1000ms
限制内存:32768KB
题目:
打印排列(二)
描述
输入两个正整数 n,m(1<n<20,1<m<min(n,5)),在 1~n 中任取 m 个数,按字典序从小到大输出所有这样的排列。
输入格式
输入两个正整数n,m。
输出格式
输出所有排列。
输入样例
3 2
输出样例
1 2 1 3 2 1 2 3 3 1 3 2
#include<iostream>
#include<cstring>
using namespace std;
int n,m,hezi[10];
bool visit[10];
void dfs(int step)
{
//第step个已经处理完了。
if(step==m+1)
{
for(int i=1;i<=step-2;i++)
cout<<hezi[i]<<" ";
cout<<hezi[step-1]<<endl;
return;
}
for(int i=1;i<=n;++i)
{
if(!visit[i])
{
visit[i]=1;
hezi[step]=i;
dfs(step+1);
visit[i]=0;
}
}
}
int main()
{
cin>>n>>m;
memset(visit,0,sizeof(visit));
dfs(1);
return 0;
}