题目描述
要求计算从1到N的N个整数所能构成的所有排列,并按照字典顺序依次输出。
输入格式
输入为一组整数,每行为一个整数N,N<8,结尾行为0。
输出格式
对每一个输入N,按照字典序输出1到N的所有排列,数字中间用空格隔开,每个排列的输出占一行。
输入样例
2
3
0
输出样例
1 2
2 1
1 2 3
1 3 2
2 1 3
2 3 1
3 1 2
3 2 1
分析:此题用到了深度优先搜索的递归实现,详见《算法笔记》p270
其本质就是通过递归来枚举所有可能的情况,bool used[10]是用来判断当前数字是否排列过了,避免重复排列,used[i]=1时,说明排过了,为0时,说明没排过,ans[10]用来储存排列答案。
代码如下:
#include
using namespace std;
bool used[10]={0};
int ans[10];
int n;
void DFS(int u)
{
if(u == n + 1)
{
for (int i = 1;i <= n;i ++)
cout<> n)
DFS(1);
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)