目录
最近刚刚学习了递归,回溯算法来进行深度搜索。对一些题目有一些感触,顺便写下变体的解法。
此类深搜主要分为无相同元素和有相同元素,下面又分好几种情况。
无相同元素
全排列
void dfs(int i){
if(n==i){
for(int j=0;j<n;j++)
printf("%5d",a[j]);
printf("\n");
}
else
for(int j=1;j<=n;j++)
if(b[j]==0){
b[j]=1;
a[i]=j;
dfs(i+1);
b[j]=0;
}
}
例题1:
问题 A: 全排列问题
时间限制: 1 Sec 内存限制: 128 MB
提交: 123 解决: 71
[提交][状态][讨论版][命题人: 外部导入]题目描述
输出自然数1到n所有不重复的排列,即n的全排列,要求所产生的任一数字序列中不允许出现重复的数字。
输入
输入 n(1≤n≤9)
输出
由1~n组成的所有不重复的数字序列,每行一个序列。每个数字占5列。
样例输入
4样例输出
1 2 3 4 1 2 4 3 1 3 2 4 1 3 4 2 1 4 2 3 1 4 3 2 2 1 3 4 2 1 4 3 2 3 1 4 2 3 4 1 2 4 1 3 2 1 4 3 3 1 2 4 3 1 4 2 3 2 1 4 3 2 4 1 3 4 1 2 3 4 2 1 4 1 2 3 4 1 3 2 4 2 1 3 4 2 3 1 4 3 1 2 4 3 2 1[提交][