码迷,mamicode.com
首页 > 编程语言 > 详细

全排列递归算法

时间:2019-10-03 12:36:24      阅读:70      评论:0      收藏:0      [点我收藏+]

标签:pre   ref   代码   class   div   输出   枚举   void   ret   

转自:https://blog.csdn.net/xiazdong/article/details/7986015

 

我们可以将这个排列问题画成图形表示,即排列枚举树,比如下图为{1,2,3}的排列枚举树:
 技术图片
从第一个数开始枚举确认,接着进入下一个递归即枚举下一个数,直到最后一个数被确认到达出口。
如确认了第一个数1,则确认第二个数为2,接着确认3,一次递归结束输出123
返回到上一层第二层,确认第二个数的枚举{2,3}只有3没被枚举,确认第二个数为3,接着第三个数为2,输出132;
返回第二层,无可枚举数,再返回上一层即确认第一个数{1,2,3},确认第一个数为2,重复上述,确认第二个数为{1,3},枚举。。。。
直到所有数都枚举完,则递归结束,全排列完成。
核心代码:
void perm(int arr[], int begin,int end) {		
  if(end==begin)
  { //一到递归的出口就输出数组,此数组为全排列     for(int i=0;i<=end;i++)
    {       printf("%d",arr[i]);     }     printf("\n");     return;   }else
   {
    for(int j=begin;j<=end;j++)
    {     swap(begin,j); //for循环将begin~end中的每个数放到begin位置中去 交换两个数
    perm(arr,begin+1,end); //假设begin位置确定,那么对begin+1~end中的数继续递归
    swap(begin,j); //换过去后再还原     }   } }

  

 

 

全排列递归算法

标签:pre   ref   代码   class   div   输出   枚举   void   ret   

原文地址:https://www.cnblogs.com/Theo-sblogs/p/11619277.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!