全排列

给定一个字符串,要求给出其所有的排列。例如给出“ABC”,则其排列有:ABC,ACB,BAC,BCA,CAB,CBA 6种。这是一个看似简单,但是实现起来却不是很容易的问题。记得去年一个师姐去参加某NB公司的笔试的时候就被这样一个问题给整了,更加郁闷的是别人是把程序都给出了,给出了输入,要给出输出。结果是倒弄了半天,最后发现是求解全排列,郁闷不已!

解法一:经典的解法,也叫“后补法”:

void Permutation2(char* a, int m, int n)

{

       int i;

       char t;

 

       if (m < n-1)

       {

              Permutation2(a, m + 1, n);

 

              for (i = m + 1; i < n; i++)

              {

                     t    = a[m];

                     a[m] = a[i];

                     a[i] = t;

 

                     Permutation2(a, m + 1, n);

                    

                     t    = a[m];

                     a[m] = a[i];

                     a[i] = t;

              }

       }

       else

       {

              cout<<a<<endl;

       }

}

解法二::循环左移,这是全排列的一个特性。实现代码为:

void CircleLeftShit(char* str,int m)

{

       int i;

       char temp = str[0];

 

       for (i = 0; i < m - 1; i++)

       {

              str[i] = str[i+1];

       }

 

       str[i] = temp;

}

 

 

void Permutation(char* str,int m,int n)

{

       if (m < n)

       {

              for (int k = 0; k <= m; k++)

              {

                     Permutation(str,m + 1,n);

 

                     CircleLeftShit(str,m);

              }

       }

       else

       {

              cout<<str<<endl;

       }

      

}

以下给出一个测试程序:

int main(int argc,char* argv[])

{

       char str[]="ABC";

      

       Permutation(str,0,3);

 

       cout<<"......."<<endl;

 

       Permutation2(str,0,3);

 

       return 0;

}

      

转载于:https://www.cnblogs.com/blessw/archive/2010/02/01/1661348.html

1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 、5资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值