一、实验目标
从1到n中,任意选出m个数的所有排列,计算出方案数。
输入格式: 两个整数n和m
输出格式: 输出每一种方案以及方案数
输入样例:4 3
输出样例:
1 2 3
1 2 4
1 3 2
1 3 4
1 4 2
1 4 3
2 1 3
2 1 4
2 3 1
2 3 4
2 4 1
2 4 3
3 1 2
3 1 4
3 2 1
3 2 4
3 4 1
3 4 2
4 1 2
4 1 3
4 2 1
4 2 3
4 3 1
4 3 2
24
数据范围:1<=m<=n<=20
二、分析
1、搜索的要素
解:
用t计算层数,当t>m时即表示一个解,此时可输出方案,计数递增。
每层选择的数,存储到a[]数组里,输出方案时使用。
状态:每层都循环1..n选择
剪枝条件:上面层次走过的,不重复,用to[]数组来标记
回溯: * 当某个下级层次的调用完成回到上一层时,要清除上级层次设置的to[]标记。 * t层数的清除:利用函数调用不会影响入参的机制,自动清除。
三、实验步骤
数据定义与输入
实现search(t)函数
当t>m时,输出一个方案并计数
循环本层的选择,可行就递归调用search(t+1)
main调用search函数,输出计数