博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
全排列算法
阅读量:5068 次
发布时间:2019-06-12

本文共 1127 字,大约阅读时间需要 3 分钟。

全排列算法:

#include<iostream>

using namespace std;

template <class Type>

void Perm(Type list[], int k, int m)
{
    if(k==m)                      
    {
        for(int i=0; i<=m; i++)
            cout << list[i];
        cout << endl;
    }
    else
      for(int j=k; j<=m; j++)
      {
          Swap(list[k],list[j]);
          Perm(list, k+1, m);
          Swap(list[k],list[j]);
      }
}

template<class Type>

inline void Swap(Type &a, Type &b)
{
    Type temp=a;
    a=b;
    b=temp;
}

 

这是经典的全排列算法。m和k分别表示要进行全排列的元素范围,即两个端点的index,m为开始的index,k为结束端点index。

template <class Type>

//k和m表示需要被全排列的元素范围--两端点的index
void Perm(Type list[], int k, int m)
{
    if(k==m)    //被处理的范围缩小为0                  
    {
        for(int i=0; i<=m; i++)
            cout << list[i];
        cout << endl;
    }
    else
      for(int j=k; j<=m; j++)
      {
          Swap(list[k],list[j]);//下标为k和j的元素交换在数组中的位置
          Perm(list, k+1, m););/*每次调用时k+1,即全排列范围缩小1*/
          Swap(list[k],list[j]);//回溯的时候,还原为先前状态
      }
}

给你讲讲算法思想吧:

假设我们求permute(abc)的全排列。permute(abc)的全排列=a+permute(bc)和b+permute(ac)和c+permute(ab)=…………….依次类推。所以就可以用递归做。而将abc拆分成a+bc,b+ac,c+ab的过程就是上面的:
      for(int j=k; j<=m; j++)
      {
          Swap(list[k],list[j]);
          Perm(list, k+1, m);
          Swap(list[k],list[j]);
      }
这个过程。做好以后还要换回来,恢复原状,接着做。
当最后只有1个字母的时候,即k=m的时候,只有一种情况,因而输出。

转载于:https://www.cnblogs.com/wonderKK/archive/2012/04/05/2433694.html

你可能感兴趣的文章
20145201 《信息安全系统设计基础》第2周学习总结
查看>>
和efast对接
查看>>
ajax中的async属性值之同步和异步及同步和异步区别
查看>>
qt 之http学习
查看>>
PIG__Failed to create DataStorage解决方案
查看>>
[CTSC2018]混合果汁(二分答案+主席树)
查看>>
Linux学习私人笔记-压缩文件命令
查看>>
ASP.NET/C#获取文章中图片的地址
查看>>
Spring MVC 入门(二)
查看>>
Java处理多人同时读写文件的文件锁处理
查看>>
设计模式IOS篇-第二章:委托模式
查看>>
beego——日志处理
查看>>
【连载】 FPGA Verilog HDL 系列实例--------十进制加减法计数器
查看>>
MySQL中MyISAM与InnoDB区别及选择
查看>>
DataGrid 上修改數據
查看>>
nginx php-fpm安装配置(转)
查看>>
重读The C programming Lanuage 笔记一:类型转换
查看>>
复杂类型的属性注入
查看>>
回家最好最快路线
查看>>
mysql面试题
查看>>