首页 > 编程 > C++ > 正文

组合数学中字典序法C++实现

2019-11-08 02:13:16
字体:
来源:转载
供稿:网友

组合数学中字典序法的实现

step1: 

对于排列a[0...n−1],找到所有满足a[k]<a[k+1](−1<k<n−2)的k的最大值,如果这样的k不存在,则说明当前排列已经是a的所有排列中字典序最大者,所有排列输出完毕。 step2: 在a[k+1...n]中,寻找满足这样条件的元素l,使得在所有a[l]>a[k]的元素中,a[l]取得最小值。也就是说a[l]>a[k],但是小于所有其他大于a[k]的元素。 step3: 交换a[l]a[k]. step4: 对于a[k+1...n]

,反转该区间内元素的顺序。也就是说a[k+1]与a[n]交换,a[k+2]与a[n-1]交换,……,这样就得到了a[1…n]在字典序中的下一个排列。

妈的截屏截成狗了,,,,,一群草泥马飞过。。。。。


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

图片精选