C4-排列

 

考点

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 }

 

 

posted @ 2019-11-08 21:28  kubab  阅读(205)  评论(0编辑  收藏  举报