美文网首页
全排列(DFS解法)

全排列(DFS解法)

作者: Epimenides | 来源:发表于2021-12-06 22:49 被阅读0次

题目链接

  1. 回溯的时候,需要将状态恢复到原有的样子
  2. 全局数组int path[N]记录状态,用于最后的输出
  3. 开一个bool st[N]数组记录哪些数被用过了
dfs 函数该怎么实现?
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; i ++) // 这里i从1开始是因为题目是因为n在[1, 7]之间
        if (!st[i])
        {
            path[u] = i;
            st[i] = true;
            dfs(u + 1);
            st[i] = false;  //回溯的时候将状态恢复,i++的一次循环就是一次回溯
        }
}

参考代码

#include <bits/stdc++.h>

using namespace std;

const int N = 1e7 + 10;

int path[N];
int st[N];
int n;

void dfs(int u)
{
    if(u == n)
    {
        for (int i = 0; i < n; i ++) cout << path[i] <<' ';
        puts("");
        return;
    }
    
    for(int i = 1;i <= n; i ++)
        if(!st[i])
        {
            st[i] = true;
            path[u] = i;
            dfs(u + 1);
            st[i] = false;
        }
}

int main()
{
    cin >> n;
    
    dfs(0);
    
    return 0;
}

相关文章

  • 全排列(DFS解法)

    题目链接[https://www.acwing.com/problem/content/844/] 回溯的时候,需...

  • 旅行商问题

    旅行商问题是一个NP问题。最简单的解法是枚举法:全排列,DFS 根据http://blog.csdn.net/q_...

  • 组合与排列

    参考资料:1. 全排列题目2. 全排列官方解法3. 全排列题目23. 全排列题目2官方解法4. 可重复组合题目5....

  • 46. 全排列

    全排列问题有很多的解法 这里使用的解法是位向量法

  • 46. Permutations

    Description 找到数组全排列 Solution 暴力dfs with sortTime O(N! *N ...

  • leetcode指北---DFS

    DFS,也就是深搜,实质就是枚举。如果题目问的是一共多少种方法,多少种排列...尽管用。 全排列问题: 全排列:给...

  • 110. Balanced Binary Tree

    解法一:由上至下 解法二:dfs

  • 46、全排列 | 算法(leetcode,附思维导图 + 全部解

    零 标题:算法(leetcode,附思维导图 + 全部解法)300题之(46)全排列 一 题目描述 二 解法总览(...

  • HJ89 24点运算

     解法思想,全排列+递归。 Reference[1] next_permutation 的原理和使用[https:...

  • 93. Restore IP Addresses[DFS]

    NAIVE 解法,O(n3): dfs dfs解法我写了一个,我想的是类似Combination Sum那种的;但...

网友评论

      本文标题:全排列(DFS解法)

      本文链接:https://www.haomeiwen.com/subject/jxinxrtx.html