当前位置: 首页 > news >正文

用回溯算法实现全排列

题目:
给出一个数组,将这个数组的所有排列方式打印出来

include<bits/stdc++.h>

void swap(int& a, int& b) {
int temp = a; a = b;
b = temp;
}

// 生成全排列
void permute(int* nums, int start, int n) {
if (start == n) { // 当起始位置等于数组长度时,输出当前排列
for (int i = 0; i < n; ++i) {
cout << nums[i];
if (i < n - 1) cout << ", ";
}
cout << endl;
return;
}

// 固定当前位置,递归生成剩余部分的排列
for (int i = start; i < n; ++i) {swap(nums[start], nums[i]);    // 选择第i个元素作为当前位置permute(nums, start + 1, n);     // 递归生成剩余部分的排列swap(nums[start], nums[i]);    // 回溯,恢复原数组顺序
}

}

int main() {
int nums[] = { 1, 2, 3 };
int n = sizeof(nums) / sizeof(nums[0]);

cout << "全排列结果:" << endl;
permute(nums, 0, n);return 0;

}

输出案例:
全排列结果:
1, 2, 3
1, 3, 2
2, 1, 3
2, 3, 1
3, 2, 1
3, 1, 2

这个回溯的巧妙之处在于利用了一个整型数据start来控制交换的位置,同时减少循环次数,这个思路非常不好想,虽然可以直接用三层for循环暴力枚举,但是当n>4时枚举就会变得十分困难,因此,回溯算法就成了减少运行时间的一个有力工具,要好好理解。

http://www.vanclimg.com/news/1624.html

相关文章:

  • 如何在Consumption类型的容器应用环境中缓存Docker镜像
  • [AlpaGasus] AlpaGasus: Training A Better Alpaca with Fewer Data | ICLR 2024
  • DNS 记录类型详解
  • 使用Docker部署前端应用
  • python基础篇(1)
  • P1956 Sum 题解
  • 洛谷P8742 [蓝桥杯 2021 省 AB] 砝码称重 题解
  • 拼接文件路径
  • 踩坑:Mybatis Plus 逻辑删除 @TableLogic
  • UE简单激活教程V24.00.0.72
  • msf生成Windows木马
  • 深入浅出控制反转与依赖注入:从理论到实践 - 详解
  • java入门:安装开发环境
  • 背包DP(基础篇) - L
  • 3、行列转换(列转行)
  • 洛谷P1510 精卫填海 题解
  • 30
  • 25.7.29ds专题测试总结
  • 软工7.29
  • 在线卷积全解-从cdq分治到多叉与自迭代结构
  • ​iTrustSSL证书夏季大促,最高直降92.5%!
  • Ekoparty CTF 2024 赛题详解:从取证分析到密码破解的实战记录
  • 亚马逊机器人如何用多模态识别技术取代条形码
  • js获取多个div元素的方法。如果这些div有父子关系,如何进行区分?如何由子获得父?
  • django+Vue的项目使用docker打包
  • PyTorch 构建轻量级验证码识别模型
  • Hello CnBlogs
  • 从简历到入职:Moka稳定性雷达如何预测候选人留存率
  • [POI2012] Prefixuffix 题解
  • 7.29