C++实现全排列
来源:互联网 发布:知进退明得失手抄报 编辑:程序博客网 时间:2024/06/06 02:51
问题描述:
有n个元素,我们的目的是生成这n个元素的全排列。
算法设计思路:
(1)将规模为n的排列问题转化为规模为n-1的排列问题;
(2)将规模为n-1的排列问题转化为规模为n-2的排列问题;
(3)以此类推。
针对具体问题可以这么理解:(这里假设a[ ]={1,2,3,4,.....})
(1)如果n=1,很显然,n的全排列为{1};
(2)如果n=2,即a[]={1,2},n的全排列为
{2,1}——>a[1]和a[2]交换,再求{2}的全排列,即归于步骤1;
{1,2}——>a[2]和a[2]交换,再求{1}的全排列,即归于步骤1;
(3)如果n=3,即a[]={1,2,3},n的全排列为
{{3,2},1}——>a[1]和a[3]交换,再求{3,2}的全排列,即可归于步骤2;
{{1,3},2}——>a[2]和a[3]交换,再求{1,3}的全排列,即可归于步骤2;
{{1,2},3}——>a[3]和a[3]交换,再求{1,2}的全排列,即可归于步骤2;
......
以此类推。
代码如下:
#include <iostream>using namespace std;int n;int sum=0;//数据互换void swap(int *a,int *b){ int temp; temp=*a; *a=*b; *b=temp;}//输出结果void result(int a[]){ sum++; cout<<sum<<endl; for(int i=0;i<n;i++){ cout<<a[i]; } cout<<endl;}//实现全排列核心算法void Perm(int a[],int n){ int i; if(n==1){ result(a); } else{ for(i=0;i<n;i++){ swap(a[i],a[n-1]); Perm(a,n-1); swap(a[i],a[n-1]); } }}//主函数int main(){ int a[101]; cin>>n; for(int i=0;i<n;i++){ cin>>a[i]; } Perm(a,n); return 0;}
- 全排列C语言实现
- C语言实现全排列
- C语言实现全排列
- C语言实现全排列
- 全排列 递归实现 c 语言实现
- 数组全排列c语言实现
- c 语言实现全排列和组合
- C语言实现全排列算法
- 字符串全排列 C语言实现
- C语言实现的全排列算法
- c语言编程实现数字全排列
- 数组全排列c语言实现
- c语言实现全排列一
- C语言全排列算法实现
- 全排列 (C语言实现)
- C语言实现的全排列算法
- C语言递归实现全排列
- 全排列-递归实现-C描述
- Oracle 培训笔记
- UITextView 添加placeholder
- 1-0组成的串中,1和0个数相等的最长子串
- “黑马程序员”宣传语有奖大征集《参赛作品》
- Telnet HTTP 测试步骤 解决返回400 bad Request
- C++实现全排列
- php:检测用户当前浏览器是否为IE浏览器
- 教你如何使用libpng显示png图片
- vm会不定时地宕机
- 一个公司的管理之三:在公布任何的任命、制度之前一定要三思
- Canopy算法原理
- 获取html所带参数
- linux下复制光盘映像
- MBR的修复与Ubuntu的卸载