再学一道算法题:排列数字(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;
}
相关文章
|
5月前
|
算法 测试技术 定位技术
数据结构与算法——DFS(深度优先搜索)
数据结构与算法——DFS(深度优先搜索)
|
22天前
|
机器学习/深度学习 算法
算法系列之搜索算法-深度优先搜索DFS
深度优先搜索和广度优先搜索一样,都是对图进行搜索的算法,目的也都是从起点开始搜索,直到到达顶点。深度优先搜索会沿着一条路径不断的往下搜索,直到不能够在继续为止,然后在折返,开始搜索下一条候补路径。
97 62
算法系列之搜索算法-深度优先搜索DFS
|
7月前
|
算法
DFS算法的实现
DFS算法的实现
105 3
|
9月前
|
存储 算法 Java
Java中,树与图的算法涉及二叉树的前序、中序、后序遍历以及DFS和BFS搜索。
【6月更文挑战第21天】Java中,树与图的算法涉及二叉树的前序、中序、后序遍历以及DFS和BFS搜索。二叉树遍历通过访问根、左、右子节点实现。DFS采用递归遍历图的节点,而BFS利用队列按层次访问。以下是简化的代码片段:[Java代码略]
67 4
|
4月前
|
算法 vr&ar 计算机视觉
数据结构之洪水填充算法(DFS)
洪水填充算法是一种基于深度优先搜索(DFS)的图像处理技术,主要用于区域填充和图像分割。通过递归或栈的方式探索图像中的连通区域并进行颜色替换。本文介绍了算法的基本原理、数据结构设计(如链表和栈)、核心代码实现及应用实例,展示了算法在图像编辑等领域的高效性和灵活性。同时,文中也讨论了算法的优缺点,如实现简单但可能存在堆栈溢出的风险等。
132 0
|
7月前
|
算法 Java
LeetCode初级算法题:环形链表+排列硬币+合并两个有序数组java解法
LeetCode初级算法题:环形链表+排列硬币+合并两个有序数组java解法
81 0
|
9月前
|
算法
数据结构与算法-DFS+BFS篇(迷宫问题)
数据结构与算法-DFS+BFS篇(迷宫问题)
124 3
|
9月前
|
算法 Java
Java数据结构与算法:图算法之深度优先搜索(DFS)
Java数据结构与算法:图算法之深度优先搜索(DFS)
|
9月前
|
算法 索引
DFS算法及应用(二)
回溯:回溯就是DFS的一种,在搜索探索过程中寻找问题的解,当发现不满足求解条件时,就回溯返回,尝试其他路径。

热门文章

最新文章