排列生成器详解+实例 (C++实现)

全排列:给定一个具有N个元素的集合,要求输出这个集合中元素的所有可能的排列。此时便要用到排列生成器。

显然,N个元素,有N!中可能的排列。

以字符集合(a,b,c,d)为例:

(1) 以a开头,后面接(b,c,d)的所有排列。

(2) 以b开头,后面接(a,c,d)的所有排列。

(3) 以c开头,后面接(a,b,d)的所有排列。

(4) 以d开头,后面接(a,b,c)的所有排列。

从上面的描述中,很容易看出这里存在着递归的思想。

所以下面给出用递归方法求全排列的算法。

void Permutations(char* a,const int k,const int m)	//a代表字符数组,m代表元素个数-1(下标从0开始 )
{
	if(k==m)
	{
		for(int i=0;i<=m;i++)
		{
			cout<<a[i]<<" ";
		}
		cout<<endl;
	}
	else
	{
		for(int i=k;i<=m;i++)
		{
			swap(a[k],a[i]);
			Permutations(a,k+1,m);
			swap(a[k],a[i]);
		}
	}
}


完整实例如下:

#include<iostream> 
using namespace std;

void Permutations(char* a,const int k,const int m)	//a代表字符数组,m代表元素个数-1()下标从0开始 
{
	if(k==m)
	{
		for(int i=0;i<=m;i++)
		{
			cout<<a[i]<<" ";
		}
		cout<<endl;
	}
	else
	{
		for(int i=k;i<=m;i++)
		{
			swap(a[k],a[i]);
			Permutations(a,k+1,m);
			swap(a[k],a[i]);
		}
	}
}

int main()
{
	char b[3]={'a','b','c'};
	Permutations(b,0,2);	 
	
	return 0;
}

运行截图如下:


参照另一篇博客:字符串的全排列算法讲解

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
第1章 概述 1.1 MFC与C++ 1.2 VC++组件 1.3 安装 1.3.1 环境 1.3.2 安装过程 第2章 开发环境 2.1 主窗口 2.2 工具栏 2.2.1 Shaod工具栏 2.2.2 Build Mini-bar工具栏 2.3 菜单栏 2.3.1 File菜单 2.3.2 Edit菜单 2.3.3 View菜单 2.3.4 tasert菜单 2.3.5 Project菜单 2.3.6 Build菜单 2.3.7 Tools菜单 2.3.8 Window菜单 2. 3.9 Help菜单 2.4 工程工作区和主工作区 2.4.1 CtassView面板 2.4.2 FileView面板 2.4.3 ResourceView面板 2.4.4 主工作区 2.5 资源和资源编辑 2.5.1 加速键编辑 2.5.2 对话框编辑 2.5.3 图形编辑 2.5.4 菜单编辑 2.5.5 字符串表编辑 2.5.6 工具栏编辑 2.6 版本信息编辑 第 3章从 AppWisard开始 3.1 应用程序类型 3.2 创建简单的Windows应用程序 3.3 AppWizard——生成结果 3.3.1 分类 3.3.2 传递和接收 3.3.3 处理 3.4 实例 第4章 对话框及控件 4.1 对话框 4.1.1 组成与分类 4.1.2 CDiaiog类 4.1.3 创建对话框 4.1.4 通用对话框类 4.2 控件 4.2.1 标准Windows控件 4.2.2 其他控件 4.3 创建基于对话框的应用程序 4.4 控件栏 4.4.1 工具栏 4.4.2 状态栏 4.4.3 对话框栏 4.5 属性单、属性页和向导 4.5.1 CPropertyPage类 4.5.2 CPropertySheet类 4.5.3 创建属性单 4.5.4 创建向导 4.6 实例 第5章 文档类和视类 5.1 文档类 5.2 文档模板类 5.3 视类 5.4 文档/视结构 5.5 菜单和加速键 5.5.1 菜单 5.5.2 添加消息处理函数 5.5.3 CMenu类 5.5.4 创建快捷菜单 5.5.5 添加加速键 5.6 实例 第6章 图形处理 6.1 设备环境 6.1.1 图形设备接口 6.1.2 设备环境映射模式 6.2 设备环境类 6.2.1 基类CDC类 6.2.2 用类CPaintDC绘图 6.2.3 用类CClientDC管理客户区 6.2.4 用类CWindowDC管理框架窗口 6.2.5 具有类CMetaFileDC的Windows元文件 6.3 GDI对象 6.3.1 类型 6.3.2 构造 6.3.3 选择 6.3.4 表示和使用颜色 6.4 画笔 6.4.1 分类 6.4.2 创建CPen类对象 6.4.3 选择堆画笔 6.4.4 绘画 6.4.5 实例 6.5 画刷 6.5.1 分类 6.5.2 创建CBrush对象 6.5.3 使用逻辑画刷 6.5.4 实例 6.6 字
第1章 概述 1.1 MFC与C++ 1.2 VC++组件 1.3 安装 1.3.1 环境 1.3.2 安装过程 第2章 开发环境 2.1 主窗口 2.2 工具栏 2.2.1 Shaod工具栏 2.2.2 Build Mini-bar工具栏 2.3 菜单栏 2.3.1 File菜单 2.3.2 Edit菜单 2.3.3 View菜单 2.3.4 tasert菜单 2.3.5 Project菜单 2.3.6 Build菜单 2.3.7 Tools菜单 2.3.8 Window菜单 2. 3.9 Help菜单 2.4 工程工作区和主工作区 2.4.1 CtassView面板 2.4.2 FileView面板 2.4.3 ResourceView面板 2.4.4 主工作区 2.5 资源和资源编辑 2.5.1 加速键编辑 2.5.2 对话框编辑 2.5.3 图形编辑 2.5.4 菜单编辑 2.5.5 字符串表编辑 2.5.6 工具栏编辑 2.6 版本信息编辑 第 3章从 AppWisard开始 3.1 应用程序类型 3.2 创建简单的Windows应用程序 3.3 AppWizard——生成结果 3.3.1 分类 3.3.2 传递和接收 3.3.3 处理 3.4 实例 第4章 对话框及控件 4.1 对话框 4.1.1 组成与分类 4.1.2 CDiaiog类 4.1.3 创建对话框 4.1.4 通用对话框类 4.2 控件 4.2.1 标准Windows控件 4.2.2 其他控件 4.3 创建基于对话框的应用程序 4.4 控件栏 4.4.1 工具栏 4.4.2 状态栏 4.4.3 对话框栏 4.5 属性单、属性页和向导 4.5.1 CPropertyPage类 4.5.2 CPropertySheet类 4.5.3 创建属性单 4.5.4 创建向导 4.6 实例 第5章 文档类和视类 5.1 文档类 5.2 文档模板类 5.3 视类 5.4 文档/视结构 5.5 菜单和加速键 5.5.1 菜单 5.5.2 添加消息处理函数 5.5.3 CMenu类 5.5.4 创建快捷菜单 5.5.5 添加加速键 5.6 实例 第6章 图形处理 6.1 设备环境 6.1.1 图形设备接口 6.1.2 设备环境映射模式 6.2 设备环境类 6.2.1 基类CDC类 6.2.2 用类CPaintDC绘图 6.2.3 用类CClientDC管理客户区 6.2.4 用类CWindowDC管理框架窗口 6.2.5 具有类CMetaFileDC的Windows元文件 6.3 GDI对象 6.3.1 类型 6.3.2 构造 6.3.3 选择 6.3.4 表示和使用颜色 6.4 画笔 6.4.1 分类 6.4.2 创建CPen类对象 6.4.3 选择堆画笔 6.4.4 绘画 6.4.5 实例 6.5 画刷 6.5.1 分类 6.5.2 创建CBrush对象 6.5.3 使用逻辑画刷 6.5.4 实例 6.6 字

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值