当前位置:   article > 正文

7.【C/C++ 全排列算法 (详解)】_c++全排列

c++全排列

 1.1    全排列的介绍

      2.1   方法和思路

         3.1    穷举法

            4.1    next_permutation()函数法

                  4.1.1      升序  

                      4.1.2     降序

       5     总结 


 1.1    全排列的介绍

 从n个不同元素中任取m(m≤n)个元素,按照一定的顺序排列起来,叫做从n个不同元素中取出m个元素的一个排列。当m=n时所有的排列情况叫全排列。

 2.1   方法和思路

  进行穷举法和特殊函数的方法,穷举法的基本思想是全部排列出来.特殊函数法进行特殊排列.

  3.1    穷举法

 【不包含重复数字的解法】    

  1. #include <iostream>
  2. using namespace std;
  3. int main()
  4. {
  5. int a[3];
  6. cout << "请输入一个三位数:" << endl;
  7. for (int m = 0; m < 3; m++)
  8. {
  9. cin >> a[m];
  10. }
  11. for (int i = 0; i < 3; i++)
  12. {
  13. for (int j = 0; j < 3; j++)
  14. {
  15. for (int k = 0; k < 3; k++)
  16. {
  17. if (i != j && i != k && j != k)
  18. {
  19. cout << a[i] << a[j] << a[k] << " ";
  20. }
  21. }
  22. }
  23. }
  24. }

【包含重复数据的解法】   

  1. #include <iostream>
  2. using namespace std;
  3. int main()
  4. {
  5. int a[3];
  6. cout << "请输入一个三位数:" << endl;
  7. for (int m = 0; m < 3; m++)
  8. {
  9. cin >> a[m];
  10. }
  11. for ( int i = 0; i < 3; i++)
  12. {
  13. for (int j = 0; j < 3; j++)
  14. {
  15. for (int k = 0; k < 3; k++)
  16. {
  17. if (i != j && i != k && j != k)
  18. {
  19. cout << a[i] << a[j] << a[k] << " ";
  20. }
  21. else if(i==j&&i==k&&j==k)
  22. {
  23. cout << a[i] << a[j] << a[k] << " ";
  24. }
  25. }
  26. }
  27. }
  28. }

4.1    next_permutation()函数法而且调用了sort()排序函数

  什么是sort函数?     http://t.csdn.cn/Tq9Wn

这种方法也是小编特别推荐使用的,因为这种方法不仅可以高效的进行排序而且特别容易理解.

next_permutation(s1.begin(), s1.end())

   解释:s1.begin(),是字符串的开头,s1.end()是字符串的结尾   

头文件:

#include <algorithm>

    4.1.1      升序          

  1. #include <iostream>
  2. #include <algorithm>
  3. #include <string.h>
  4. using namespace std;
  5. int main()
  6. {
  7. string s1;
  8. cout << "请输入您要的数据:" << endl;
  9. cin >> s1;
  10. do
  11. {
  12. cout << s1 << " ";
  13. } while (next_permutation(s1.begin(), s1.end()));
  14. }

            f1779de4a4354a75b112266bede13ea5.png

  4.1.2     降序

  1. bool cmp(int a, int b)
  2. {
  3. return a > b;
  4. }
while (next_permutation(s1.begin(), s1.end(),cmp));
sort(s1.begin(), s1.end(), cmp);

   

 比升序多了以上三个数据

  1. #include <iostream>
  2. #include <algorithm>
  3. #include <string.h>
  4. using namespace std;
  5. bool cmp(int a, int b)
  6. {
  7. return a > b;
  8. }
  9. int main()
  10. {
  11. string s1;
  12. cout << "请输入您要的数据:" << endl;
  13. cin >> s1;
  14. sort(s1.begin(), s1.end(), cmp);
  15. do
  16. {
  17. cout << s1 << " ";
  18. } while (next_permutation(s1.begin(), s1.end(),cmp));
  19. }

885e220397c946139dd029a530782462.png

 5 .总结 

  有穷法具有有限性,然而特殊函数法会较好的解决了这个问题

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小惠珠哦/article/detail/826001
推荐阅读
相关标签
  

闽ICP备14008679号