欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 汽车 > 时评 > DFS 算法:全排列问题

DFS 算法:全排列问题

2025/9/15 23:13:47 来源:https://blog.csdn.net/Python_enjoy/article/details/141534725  浏览:    关键词:DFS 算法:全排列问题

在这里插入图片描述

我的个人主页 {\large \mathsf{{\color{Red} 我的个人主页} } } 我的个人主页

往 {\color{Red} {\Huge 往} } 期 {\color{Green} {\Huge 期} } 文 {\color{Blue} {\Huge 文} } 章 {\color{Orange} {\Huge 章}}

  • DFS 算法:记忆化搜索

此系列更新频繁,求各位读者点赞
关注我可以了解更多内容哦
偷偷告诉你,我正在冲 1100 粉 {\color{Gray} {\small 偷偷告诉你,我正在冲1100粉} } 偷偷告诉你,我正在冲1100
你们有什么想了解的可以发在评论区,我会仔细的看 {\color{Gray} {\small 你们有什么想了解的可以发在评论区,我会仔细的看} } 你们有什么想了解的可以发在评论区,我会仔细的看
1100 粉时我会抓几个做文章 {\color{Gray} {\small1100粉时我会抓几个做文章} } 1100粉时我会抓几个做文章


目录

  • 今天我们学什么
  • 例题
    • 全排列问题
  • 总结

今天我们学什么

今天我们要学习的是——全排列问题!
我们将会以一道“简单”的题入手,带你了解这个“有趣”的算法

例题

那么例题就是——全排列问题!
题目如下

全排列问题

题目

你可能会想要一个for循环暴力枚举,但是这样太慢了
我们可以使用dfs
作为OIer / coder的你听到了我的话, 打出了GG 打出了一下的代码

#include <bits/stdc++.h>
using namespace std;int n, a[15];
bool flag[15];void dfs(int step) {// 如果step超过了n,说明已经填满了所有位置,打印当前排列if (step > n) {for (int i = 1; i <= n; i++) {printf("%5d", a[i]);}printf("\n");return;}// 遍历所有可能的数字,填入当前位置for (int i = 1; i <= n; i++) {// 如果数字i没有被使用过,进行递归if (!flag[i]) {flag[i] = true; // 标记数字i被使用a[step] = i; // 将数字i填入当前位置dfs(step + 1); // 递归填下一个位置flag[i] = false; // 恢复数字i未被使用}}
}int main() {scanf("%d", &n);dfs(1); // 从第一个位置开始填数字return 0;
}

怎么样,全排列问题是不是很简单呢?

总结

以下内容使用了AI大模型

以上代码是一个用于输出1到n的全排列的程序。通过深度优先搜索的方式实现,利用flag数组标记数字是否已经被使用过,a数组存储当前的排列。程序从第一个位置开始填数字,递归地对下一个位置进行填数,直到填满所有位置,打印当前排列。思路步骤:输入n表示全排列的长度。
调用dfs(1)开始填数字。
在dfs函数中,如果当前位置大于n,表示已经填满了所有位置,打印当前排列。
遍历所有可能的数字,如果某个数字没有被使用过,标记为已使用,填入当前位置,然后递归地填下一个位置。
递归完成后,恢复当前数字为未使用状态,继续遍历下一个可能的数字。
递归结束后,返回主函数。
该程序可以生成1到n的全排列,并按照一定格式进行输出。

再见!记得关注我哦

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词