【题目部分】
列出所有从数字式1到数字n的连续自然数的排列,要求所产生的任一数字序列中不允许出现重复的数字。
输入
n(1<=n<=9)
输出
由1~n组成的所有不重复的数字序列,每行一个序列,每个数字场宽为5。
输入样例 1
3输出样例 1
1 2 3 1 3 2 2 1 3 2 3 1 3 1 2 3 2 1
全排列问题是回溯算法的基础入门题。回溯算法简单来说就是通过函数的递归来实现枚举,是典型的暴力算法,有时也可以通过暴力来骗分。实际上,测试中的题目只需要打好所有的暴力就可以拿不错的分数。
回溯算法框架:
void search(int g)//第g个选项
{
for (int i = 1; i <= n; i++)
{
if (!b[i]) 判断数据是否可用
{
a[g] = i; 填入选项
b[i] = 1; 保存状态
if (如果达到条件) 输出答案;
else search(g + 1); 否则继续填下一个选项
b[i] = 0; 解除状态
}
}
}
如果用普通的思路去想全排列这道题的话,你就会发现&