原理可以自己学习,实现如下,真的太久没用C++了。

#include<iostream>
#include<vector>
using namespace std;
struct jiedian
{int zhi;int dirct;//dirct==0代表左边,dirct==1代表右边,
};bool can_move(jiedian a[],int len){//判断是否存在可以移动的元素vector<jiedian> move_list;for (int i=0;i<len;i++){if (a[i].dirct==0){if (i-1>=0&&a[i-1].zhi<a[i].zhi){   move_list.push_back(a[i]);}} else{if (i+1<=len-1&&a[i+1].zhi<a[i].zhi){move_list.push_back(a[i]);}}}if (move_list.empty()){return false;}else return true;
}vector<jiedian> search_max_index(jiedian a[],int len){//求可以移动的最大元素vector<jiedian> move_list;for (int i=0;i<len;i++){if (a[i].dirct==0){if (i-1>=0&&a[i-1].zhi<a[i].zhi){   move_list.push_back(a[i]);}} else{if (i+1<=len-1&&a[i+1].zhi<a[i].zhi){move_list.push_back(a[i]);}}}return move_list;
}
void Johnson_Trotter(jiedian a[],int n){//打印初始序列for (int dayin=0;dayin<n;dayin++){cout<<a[dayin].zhi;}cout<<endl;while (can_move(a,n))//存在可移动元素即执行{vector<jiedian> s_max=search_max_index(a,n);int temp=s_max[0].zhi;for (int i=0;i<s_max.size();i++){if (s_max[i].zhi>temp){temp=s_max[i].zhi;}}for (int k=0;k<n;k++)//找最大元素并且移动{if (a[k].zhi==temp){if (a[k].dirct==0){jiedian temp1=a[k];a[k]=a[k-1];a[k-1]=temp1;break;}else{jiedian temp1=a[k];a[k]=a[k+1];a[k+1]=temp1;break;}}}for (int j=0;j<n;j++){if (a[j].zhi>temp){if (a[j].dirct==1){a[j].dirct=0;}else a[j].dirct=1;}}for (int dayin=0;dayin<n;dayin++){cout<<a[dayin].zhi;}cout<<endl;}
}int main()
{jiedian a[6];for (int i=0;i<6;i++){a[i].zhi=i+1;a[i].dirct=0;}Johnson_Trotter(a,6);return 0;
}

Johnson-Trotter(生成排列算法)相关推荐

  1. johnson_trotter(生成排列算法)

    思路和步骤: 将数字赋予方向属性 理解什么叫可移动方向(后面在图片1中说明) 判断是否存在可移动元素 bool judge_move(init* n_n, int n); 定义一个全局int k--& ...

  2. JOHNSON TROTTER 的全排列算法

    /*试一试Johnson Trotter的算法*/ /* 数组初始为123   标记数组b[]的初始值是011(0 不可移动,1否)   /要不利用二维数组--?/   b[]中找值为一的   然后看 ...

  3. Johnson_Trotter 生成排列算法

    const int N = 10; int f[N],d[N];void init(int n) {for(int i=1; i<=n; i++)f[i]=i,d[i]=-1; }void Pr ...

  4. 算法设计与分析——Johnson Trotter算法

    目录 前言 一.算法思想分析 二.算法效率分析 三.算法代码 C语言代码 后记 前言 排列与组合问题,无论是在我们生活中还是项目实际运用中,都说非常之常见的.那么,如何去运用算法思想生成全排列(一组元 ...

  5. php 实现的字典序排列算法,字典序的一个生成算法

    字典序的一个生成算法. 最近在LeetCode刷题,刷到一个题,链接: https://leetcode-cn.com/problems/permutation-sequence/ 这个题要求得长度为 ...

  6. C语言编写Johnson-Trotter算法生成排列

    //Johnson-Trotter算法生成排列#include<stdio.h>int list[99];在这里插入代码片 int num[99]; int dir[99];int cha ...

  7. 生成排列 --- 蛮力法,Johnson-Trotter算法

    生成排列 --- 蛮力法,Johnson-Trotter算法 蛮力法 Johnson-Trotter算法 蛮力法 思路: 通过递归遍历所有的排列方式. 代码演示: #include <iostr ...

  8. 用Johnson-Trotter算法生成排列!

    package decreaseAndConquer; /* * 实现用来生成排列的Johnson-Trotter算法 * 输入:一个正整数n * 输出:{1,...,n}的所有排列的列表 */ im ...

  9. Steinhaus-Johnson-Trotter 生成全排列算法

    Steinhaus-Johnson-Trotter算法是一种基于最小变换的全排列生成算法,对于排列a[1...n],该算法通过将a[i],与a[i-1](或a[i+1])进行交换,生成下一个排列,直到 ...

最新文章

  1. fibonacci数列前20项_等差数列、等比数列、调和数列等几种常见数列的总结
  2. 关于多层html标签嵌套引起CSS冲突问题的解决。
  3. 基于docker 如何部署surging分布式微服务引擎
  4. 【渝粤题库】陕西师范大学202071 统计学 作业(专升本、高起本)
  5. oracle 9 插入日期,oracle date日期类型 精析
  6. 【Python】Python迭代求解开平方算法
  7. java equ,Java equals方法详解
  8. kafka跨集群同步方案
  9. Flutter学习 — 添加Material触摸水波效果
  10. MTK 刷机操作说明v2.0(单路)
  11. 网站开发进阶(六十六)CSS3 - 新单位vmin/vmax与旧单位ex/ch使用详解
  12. java 视频 合并成一个_java实现视频分段并且合并 | 学步园
  13. Gym 101572 K.Kayaking Trip【二分+贪心】
  14. android go 短信,GO短信加强版安卓版
  15. 在C#中使用WIA获取扫描仪数据
  16. 回头再说--赶紧说两句
  17. html左侧导航栏点击下拉菜单,HTML+CSS实现下拉菜单
  18. 【毕业设计】基于springboot的小区智慧物业管理系统
  19. 海思Hi3798MV200机顶盒芯片处理器简介
  20. 解析数字孪生城市的四大特点

热门文章

  1. python基础 培训班
  2. xLua热更新(二)实现热更新
  3. 解决32G或64G的SD卡无法使用NOOBS安装树莓派的问题
  4. mysql数据库中三张表的基本连接
  5. 关于优化公式的小白理解
  6. 服务器配置问题及解决方案汇总
  7. [免费参加] 2015微软社区大课堂Community Camp开放报名啦!
  8. springcloud-oauth2实践
  9. 记忆网络之End-To-End Memory Networks
  10. 修复硬盘坏道故障及其后期处理方法