输入整数n(3<=n<=7),编写程序输出1,2,...,n整数的全排列,按字典序输出。
时间: 2023-05-30 12:01:31 浏览: 127
输出n个整数的全排列
4星 · 用户满意度95%
这道题可以使用递归来实现全排列。具体实现方法如下:
1. 定义一个数组a,用来存储当前已经选定的数字。
2. 定义一个bool类型的数组vis,用来标记数字是否已经被选定。
3. 在递归函数中,首先判断当前已经选定的数字是否已经达到n个,如果是,则输出结果,否则从1~n中选取一个未被选中的数字,将其加入a数组中,并将vis数组中对应的位置标记为true,然后递归调用函数,继续选取下一个数字。递归完成后,将a数组中最后一个数字删除,并将vis数组中对应的位置标记为false。
4. 在主函数中调用递归函数,输出结果。
代码如下:
```python
#include <iostream>
#include <cstring>
using namespace std;
const int N = 10;
int n;
int a[N];
bool vis[N];
void dfs(int u)
{
if (u == n)
{
for (int i = 0; i < n; i++) cout << a[i] << " ";
cout << endl;
return;
}
for (int i = 1; i <= n; i++)
{
if (!vis[i])
{
a[u] = i;
vis[i] = true;
dfs(u + 1);
vis[i] = false;
}
}
}
int main()
{
cin >> n;
dfs(0);
return 0;
}
```
这个程序的时间复杂度为O(n!),因为一共有n!种排列方式。
阅读全文