数字的全排列
深度优先搜索就是先走到底走到无路可走然后再进行回溯的算法,用于全排列打表操作,数字的全排列操作就是每一个序列需要包含从1到n所有的数字,但是数字不能重复,不能和原来有过的序列相同
思路:开一个bool数组用于记录当前下标的数字是否被使用过,同时开一个path数组用记录已经生成了的序列,便于输出,dfs函数的u是记录当前已经走过的步数,当步数等于n时表明已经走到了尽头需要进行回溯,在回溯前需要将已经保存在path数组的序列进行输出,每个输出后要换行,所以加了一个put。然后在没有达到最后一步时,对st数组进行遍历,如果有没有使用的数字就将其加到当前的path[u]中,然后将其变成true再送给下一层进行递归,再递归结束后恢复现场,让其变成false,因为path[u]赋值会覆盖上一次的值,所以path数组不用管。
代码如下
#include
using namespace std;
const int N = 10;
int path[N];
bool st[N];
int n;
void dfs(int u)
{
if (u == n)
{
for (int i = 0; i < n; i ++) printf("%d ", path[i]);
puts("");
return;
}
for (int i = 1; i > n;
dfs(0);
return 0;
}
Original: https://www.cnblogs.com/amour233/p/16465496.html
Author: LYL233
Title: 深度优先搜索入门
原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/644342/
转载文章受原作者版权保护。转载请注明原作者出处!