分别用递归法和穷举法实现全排列、排列与组合.doc_第1页
分别用递归法和穷举法实现全排列、排列与组合.doc_第2页
分别用递归法和穷举法实现全排列、排列与组合.doc_第3页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

(新浪博客:群众的好杰哥)用穷举法实现思路简单但是不推荐,大家都懂穷举存在效率问题,但是我大概写了一下,写的是对四个元素的全排列和组合出四个元素。递归的方法实现全排列、排列和组合所采用的递归思路是一致的,只是组合的时候需要考虑前一个元素的选择对后续选择的影响,因为毕竟是无序的,所以随机组合之后最好保留原始的元素顺序。以下函数均可编译执行。#include using namespace std;void full_exhaust(char* a)/穷举法排列An(4)for (int i=0;iN;i+)for (int j = 0;jN;j+)if (i!=j)for (int k = 0;kN;k+)if (k!=i & k!=j)for (int r=0;rN;r+)if (r!=i & r!=j & r!=k)coutaiajakarendl;void full_combination(char* a)/穷举法组合Cn(4)for (int i=0;iN;i+)for (int j = i+1;jN;j+)for (int k = j+1;kN;k+)for (int r=k+1;rN;r+)coutaiajakarendl;void full_array(char* a,int index,int n)/递归实现全排列An(n)if (index = n-1)coutaendl;elsefor(int i=index;in;i+)swap(ai,aindex);full_array(a,index+1,n);swap(ai,aindex);void arrangement(char* a,int index,int m_choose,int n_full)/递归实现排列An(m)if (index = m_choose)for (int i=0;im_choose;i+)coutai;coutendl;elsefor (int i=index;in_full;i+)swap(ai,aindex);arrangement(a,index+1,m_choose,n_full);swap(ai,aindex);void combination(char* a,char* b,int index,int m_choose,int n_full)/递归实现组合Cn(m)for(int i=index;i1) combination(a,b,index-1,m_choose,i-1);else for(int j=0;jm_choose;j+)coutabj;coutendl;int main()char a = abcdefg;int n = strlen(a);full_array(a,0,n);/递归实现全排列An(n)int m;cout请输入需要排列的数字个数m:m;arrangement(a,0,m,n);/递归实现排列An(m)int k;cout请输入需要组合的数字个数k:k;char* b = new chark;

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论