DFS实现简单全排列

C++ 实现全排列算法的 DFS 深度优先搜索

以下是关于如何使用深度优先搜索 (DFS) 来实现全排列算法的详细解释以及代码优化建议。

 基本概念

深度优先搜索(Depth First Search, DFS)是一种遍历或搜索树状结构的方法。在全排列问题中,可以通过递归的方式来模拟每一步的选择过程,并利用回溯法来撤销之前的选择以便尝试其他可能性

                  

#include <iostream>using namespace std;

int n;bool used[10];int permutation[10];

void dfs(int depth) {

    if (depth == n + 1) { // 如果当前深度达到目标长度,则打印结果

        for (int i = 1; i <= n; ++i) {

            cout << permutation[i] << ' ';

        }

        cout << '\n';

        return;

    }

    for (int i = 1; i <= n; ++i) { // 尝试每一个可用数字

        if (!used[i]) { // 若该数字未被使用过

            used[i] = true;       // 标记为已使用

            permutation[depth] = i;// 放入当前位置

            dfs(depth + 1);       // 进入下一层递归

            used[i] = false;      // 回溯:恢复标记状态

        }

    }

}

int main() {

    cin >> n;

    dfs(1);

    return 0;

}

           

             

  • n 表示要生成全排列的元素数量。
  • used[] 数组用来记录某个数字是否已经被选用。
  • permutation[] 存储当前正在构建的部分排列。
  • 函数 dfs(int depth) 是核心部分,表示当前处理到第几层(即排列中的位置),当到达最后一层时输出完整的排列

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值