递归之全排列
全排列,百度:从n个不同元素中任取m(m≤n)个元素,按照一定的顺序排列起来,叫做从n个不同元素中取出m个元素的一个排列。当m=n时所有的排列情况叫全排列。
思路: Amn这里考虑先后顺序,所以就是Amn。先建立第一个排列abc,然后确定第一个位置,第一个位置的确定即是将选定的元素取代第一个位置的元素a,这里如果按字典序就将选定元素取出,将其原位置之前的全部前移,然后将选定元素放到第一个位置,如果不按字典序,就简单地将选定元素与第一个元素互换位置。在这个排列下进入下一次即第二个元素的选取,当选取的元素只剩一个时,那此时的一组排列即是全排列的一组。
举个例子,以下按字典序排列
代码实现
#include <bits/stdc++.h> using namespace std; void recu(int b[], int pos, int len){ if(pos == len){ for(int i = 1; i <= len; i++){ if(i != 1){ cout << " "; } cout << b[i]; } cout << endl; }//这里是选取元素只剩一个时的情况 for(int i = pos; i <= len; i++){ int temp = b[i];//先将元素取出 for(int j = i; j > pos; j--){ b[j] = b[j - 1]; }//然后前移 b[pos] = temp;//然后将元素放到指定位置 recu(b, pos + 1, len);//进行下一次的选取 //以下是将排列过的恢复原序列,进行其他情况的选取 temp = b[pos]; for(int j = pos; j < i; j++){ b[j] = b[j + 1]; } b[i] = temp; } } int main(){ int n; cin >> n; int a[10] = {0}; for(int i = 1; i <= n; i++){ a[i] = i; } recu(a, 1, n); return 0; }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构