B3623 枚举排列(递归实现排列型枚举) - 洛谷
题目描述
今有 n 名学生,要从中选出 k 人排成一列拍照。
请按字典序输出所有可能的排列方式。
输入格式
仅一行,两个正整数 n,k。
输出格式
若干行,每行 k 个正整数,表示一种可能的队伍顺序。
输入输出样例
输入 #1复制
3 2
输出 #1复制
1 2 1 3 2 1 2 3 3 1 3 2
说明/提示
对于 100% 的数据,1≤k≤n≤10。
代码:
#include<bits/stdc++.h>
using namespace std;
int n,k;
int a[20][20],path[20];
bool st[20];
void dfs(int x)
{
if(x > k)
{
for(int i = 1 ; i <= k ; i++)
cout << path[i] << " ";
cout << endl;
return ;
}
for(int i = 1 ; i <= n ; i++)
{
if(!st[i])
{
st[i] = true;
path[x] = i;
dfs(x + 1);
path[x] = 0;
st[i] = false;
}
}
}
int main(void)
{
cin >> n >> k;
dfs(1);
return 0;
}