B3623 枚举排列(递归实现排列型枚举)
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;
}