深度优先搜索入门

数字的全排列

跳转链接

深度优先搜索就是先走到底走到无路可走然后再进行回溯的算法,用于全排列打表操作,数字的全排列操作就是每一个序列需要包含从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/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球