再学一道算法题:排列数字(DFS)

简介: 再学一道算法题:排列数字(DFS)

递归 DFSDFS
【知识点】

DFSDFS;搜索;递归;剪枝优化。
【本题思路】

(1)常规递归 DFSDFS 思路。

(2)剪枝优化 DFSDFS:由于任何排列中所有数的和都恒等,因此可以根据恒等和直接求出最后一个数,实现剪枝优化。

【时间复杂度】

递归 DFS:T(n)=O(n∗n!)T(n)=O(n∗n!)。

剪枝优化 DFS:T(n)=O(n!)T(n)=O(n!)。

【注意点】

(1)常规操作:首先根据递归条件判断是否应该结束。

(2)注意递归结束条件和 0/10/1 选择的权衡。


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;
    } else {
        for (int i = 1; i <= n; i++) {
            if (!st[i]) {
                path[u] = i;
                st[i] = true;
                dfs(u + 1);
                path[u]=0;
                st[i] = false;

            }
        }
    }
}

int main() {
    scanf("%d", &n);
    dfs(0);
    return 0;
}
相关文章
|
3天前
|
算法
Hierholzer算法dfs找欧拉回路模板
Hierholzer算法dfs找欧拉回路模板
38 0
|
3天前
|
算法
算法编程(二十八):重新排列单词间的空格
算法编程(二十八):重新排列单词间的空格
37 0
|
7月前
|
算法 测试技术 C++
C++二分算法习题:判断是否是完全平方数[容易]和排列箱子[容易]
C++二分算法习题:判断是否是完全平方数[容易]和排列箱子[容易]
|
8月前
|
算法 Java
【Java每日一题,字典序算法】下一个排列
【Java每日一题,字典序算法】下一个排列
|
6月前
|
算法 Python
Python算法——深度优先搜索(DFS)
Python算法——深度优先搜索(DFS)
264 8
|
3天前
|
算法 安全 定位技术
【刷题】备战蓝桥杯 — dfs 算法
dfs算法在数据较小的情况下可以使用。 一定一定要确定好终止条件,避免栈溢出。 相应做好回溯,保证每次的遍历都是不一样的选择,避免少结果。 针对题目进行对应细节处理,有能力的话可以进行剪枝优化!!!
14 0
|
3天前
|
算法 前端开发
前端算法-岛屿的最大面积-DFS(深度优先搜索)
前端算法-岛屿的最大面积-DFS(深度优先搜索)
11 0
|
3天前
|
算法 前端开发
前端算法 岛屿的最大面积 DFS(深度优先搜索)
前端算法 岛屿的最大面积 DFS(深度优先搜索)
11 0
|
3天前
|
机器学习/深度学习 消息中间件 算法
DFS - 常见算法题总结
DFS - 常见算法题总结
|
3天前
|
存储 算法 定位技术
图论算法dijkstra dfs bfs以及动态规划
图论算法dijkstra dfs bfs以及动态规划
39 0