题目描述
今有 n 名学生,要从中选出 𝑘人排成一列拍照。
请按字典序输出所有可能的排列方式。
输入格式
仅一行,两个正整数 𝑛,𝑘
输出格式
若干行,每行 𝑘 个正整数,表示一种可能的队伍顺序。
说明/提示
对于 100% 的数据,1≤𝑘≤𝑛≤10 ;
做法
与全排列相似,只是这个不能重复在加一个vis数组进行标记。
AC code:
#include <iostream> #include <cstdio> using namespace std; int n,k; int ans[53]; int vis[53]; void dfs(int i){ if(i>k){ for(int j=1;j<=k;j++){ printf("%d ",ans[j]); } printf("\n"); return ; } for(int j=1;j<=n;j++){ if(vis[j]==0){ vis[j]=1; ans[i]=j; dfs(i+1); vis[j]=0; } } } int main(){ cin>>n>>k; dfs(1); return 0; }