考点
DFS
题目
描述给定n,m,输出从 1∼n 中选择 m个数的所有排列。
要求按照字典序输出。
输入
单组数据。
一行,两个空格分隔的整数,分别表示 n,m(1≤m≤n≤8)。
输出
输出若干行,表示答案。
输入样例
3 2
输出样例
1 2 1 3 2 1 2 3 3 1 3 2
代码
1 #include <iostream> 2 /*C4-排列*/ 3 using namespace std; 4 int n, m,vis[15],ans[15],count = 0; 5 void print(int ans[]) 6 { 7 for(int i = 0; i < m; i++) 8 cout<<ans[i]<<' '; 9 cout<<endl; 10 } 11 void dfs() 12 { 13 if(count == m) //判断边界 14 print(ans); //输出结果 15 else 16 for(int i = 1; i <= n; i++) 17 { 18 if(!vis[i]) //判断可行性 19 { 20 ans[count++] = i; //标记 21 vis[i] = true; 22 dfs(); //下一步DFS 23 vis[i] = false; //恢复初始状态 24 count--; 25 } 26 } 27 } 28 29 int main() 30 { 31 cin>>n>>m; 32 dfs(); 33 return 0; 34 }