/**
本算法的思想也是希望以(12…n)作为n个元素1,2,…,n的第一个排列,
然后按照某种方法,由一个排列(p)=(p1p2…pn)直接生成下一个排列,
直到全部排列生成完毕为止。
以n=4为例,开始在排列1234的各数上方加一个左箭头“←”,
当一个数上方箭头所指的一侧,相邻的数比该数小时,便称该数处于活动状态。
从排列(p)=(p1p2…pn)生成下一个排列的算法如下:
(1)若排列(p)=(p1p2…pn)中无一数处于活动状态,则停止,否则转(2);
(2)求所有处于活动状态的数中的最大者,设为k,
k和它的箭头所指的一侧的相邻数互换位置,转(3);
(3)令比k大的所有数的箭头改变方向,转(1)。
*/
#include <iostream>
using namespace std;
enum DIR{LEFT=-1,RIGHT=1};
/* 函数功能:判断下标i所指p中元素是否处于活动状态
* 输入参数:p in,指向n个字符的一个当前排列
* dir in,标记p中每个元素的箭头方向
* i in,待判定元素的下标
* N in,待排列字符的个数
* 返回值: true 表示待判定元素为活动状态,
* false 表示待判定元素处于非活动状态
*/
boo
邻位互换生成全排列算法
最新推荐文章于 2021-05-24 09:55:35 发布