题目描述
一自然数N,设N为3,则关于N的字典序排列为123,132,213,231,312,321。对于一个自然数N(1<= N <= 9 ) , 你要做的便是生成它的字典序排列。
输入
自然数N。
输出
输出对应于N的字典序排列,每个排列占一行。
样例输入
3
样例输出
1 2 3 1 3 2 2 1 3 2 3 1 3 1 2 3 2 1
#include<iostream>
using namespace std;
int flag[20] = {0};
int store[10] = { 0 };
int n;
bool judge(int n)
{
if (flag[n] == 0)return true;
return false;
}
void dns(int k)//第K个数
{
if (k==n+1)
for (int i = 1; i < k; i++)
{
cout << store[i] << ' ';
if (i == n)cout << endl;
}
else
{
for (int j = 1; j <= n; j++)
{
if (judge(j))
{
store[k] = j;
flag[j] = 1;
dns(k + 1);
flag[j] = 0;
}
}
}
}
int main()
{
while (cin >> n)
{
dns(1);
}
return 0;
}
本文介绍了一种生成自然数N的字典序排列的算法,通过递归回溯的方法,实现了1到N的所有可能排列组合,适用于1≤N≤9的范围。文章提供了完整的C++代码实现,展示了如何通过标记数组判断数字是否已使用,以及如何存储和输出排列结果。
1382

被折叠的 条评论
为什么被折叠?



