上篇文章讲解了华容道算法基本算法知识,也是最简单的,效率也是最低的。这篇文章讲解高效率算法。从下篇文章开始主要分析linux  驱动代码以及嵌入式相关设计知识。本次编码采用棋子在棋盘中的位置编码,顺序是从左往右/从上到下。以横刀立马举例说明。正方形的应该是1(记得从0开始计算),横方块值是0x80 、竖方块是0x909、单个方格值是0x96000、空格是0x60000

编程思路与上一篇文章一致,不同之处在于编码方式和存储数据的结果、以及存储方式。下面探讨获取下一步可行的走法。上篇文章判断下一步可以走法采用的遍历方式,并且每一个方格都需要判断棋子种类,这样比较占用时间,本次判断通过棋子种类判断下一步可行走法,那么一个盘面需要分别判断正方形、横、竖、方格四种棋子是否可以移动。

判断正方形是否可移动代码如下所示。

图中代码已经想象注释,代码只截取了一部分,分别判断了是否可以向左、右移动。代码中有switchbits函数,该函数是为了交换两个方格的值,也就是一个数字的两个位之间的交换,具体代码可以参考源代码。当像左移动一时,mCao这个值也会减一。

移动横方块方式如下,原理与判断正方形一致。

这里的for循环是可以取消的,这里为了方便又多个横方块时可以通用,横刀立马只有一个横方块,for循环只有一次进入if判断内部。

程序主体框架如下,与上篇文章思路一样,判断下一步可以的走法,这里只是没有把盘面存储到线性链表中,用了红黑树数据结构去存储,RBInsert这个函数用来把盘面放入到红黑树数据结构中,包括去重判断。

插入方法如下,根据横方块与竖方块的值作为判断标准插入到红黑二叉树中。

Compare函数重构函数如下:

这些知识点看代码完全可以看懂,主要是讲主体思路

到目前为止程序能够计算出最佳走法,我们利用栈的先进后出选择实现走法的顺序输出,代码如下:

运行结果如下,本次结果是在qt软件下运行,耗时相对长一点有50ms左右,linux平台会很快。

源码下载:https://download.csdn.net/download/qq_21792169/11097495

华容道算法之性能优化相关推荐

  1. mysql not in优化_MySQL性能优化 — 实践篇2

    点赞再看,养成习惯,微信搜一搜[一角钱小助手]关注更多原创技术文章.本文 GitHub org_hejianhui/JavaStudy 已收录,有我的系列文章. 前言 MySQL索引底层数据结构与算法 ...

  2. mysql 非自然月统计_MySQL性能优化 — 实践篇1

    点赞再看,养成习惯,微信搜一搜[一角钱小助手]关注更多原创技术文章. 本文 GitHub org_hejianhui/JavaStudy 已收录,有我的系列文章. 前言 MySQL索引底层数据结构与算 ...

  3. 抖音APP告诉我们什么叫真正的性能优化天花板

    / 前言 / 抖音APP告诉我们启动性能是APP使用体验的门面,启动过程耗时较长很可能导致用户使用APP的兴趣骤减. 作为一名Androider,你一定听过启动时间2-5-8原则: 当用户在0-2秒之 ...

  4. 对比 GA 、PSO 、DE三种算法 求解连续优化问题的性能

    摘要: 演化计算又称为进化算法.进化计算,是一种元启发式方法.搜索过程是从一个初始解的集合(称为初始种群)开始的,种群中的每一个解都沿着一定的轨迹搜索,每前进一步称为种群的进化,得到的解集称为种群的一 ...

  5. 性能优化专题 - JVM 性能优化 - 04 - GC算法与调优

    目录导航 前言 Garbage Collect(垃圾回收) 如何确定一个对象是垃圾? 引用计数法 可达性分析 垃圾收集算法 标记-清除(Mark-Sweep) 复制(Copying) 标记-整理(Ma ...

  6. ps图片黑白调整算法——java实现及性能优化

    参考: http://blog.csdn.net/matrix_space/article/details/22992833 http://blog.csdn.net/majinlei121/arti ...

  7. 2021新型面试题-血虐面试官斩获字节跳动Offer!Android 精选版面试题级答案(Android+Java+算法+性能优化+四大组件...)

    前言 双非本科,自认为技术水平不差,8月从美图实习离职回学校,各种倒霉的事不断,到现在11月,为了找个好的环境复习,9月又在学校附近租了房,基本是没有面试通知就学不进去,前面由于过于自信,也没拿个保底 ...

  8. k-means算法、性能及优化

    k-means算法.性能及优化 一.k-means算法简介 k-means是用来解决著名的聚类问题的最简单的非监督学习算法之一. 该过程遵循一个简易的方式,将一组数据划分为预先设定好的k个簇.其主要思 ...

  9. SQL性能优化中的底层概念,时间复杂度,算法和数据结构,数据库组成,查询优化和表关联原理.

    原文地址: http://blog.jobbole.com/100349/ 一提到关系型数据库,我禁不住想:有些东西被忽视了.关系型数据库无处不在,而且种类繁多,从小巧实用的 SQLite 到强大的 ...

最新文章

  1. 基于自然的灵感算法--元启发式
  2. 数据企业IBM段仰圣:大数据关键是“分析”
  3. Mysql中大表添加索引的办法
  4. 面试官:为什么HTTPS是安全的?
  5. php yield 导出文件,PHP yield 读取大文件
  6. python从标准输入读取数据_在PYTHON中如何从标准输入读取内容stdin
  7. C# 网络编程之webBrowser乱码问题及解决知识
  8. java 加密解密简单实现
  9. jmeter语言设置
  10. LeetCode 第 25 场双周赛(718/1832,前39.2%)
  11. 单体预聚合的目的是什么_第七章 配位聚合
  12. win2000/2003 Discuz生存环境搭建及基础优化 攻略
  13. filter过滤后重新添加_Kibana基本使用---使用Flight Dashboard过滤数据
  14. VS Code 运行Vue项目
  15. 如何记才能不搞混绝对路径和相对路径
  16. c语言从入门到精通第四版电子书_C语言从入门到精通(第4版)
  17. DW里面html鼠标点击特效,【好好学习】-DW-鼠标点击 爆米花特效 代码
  18. 符号代数方程求解,分析可视化 dsolve函数
  19. 解题:NOI 2010 航空管制
  20. Android ANR 触发原理

热门文章

  1. 【毕业论文】免费查重网站及降重软件
  2. java中pageInfo分页带条件查询+查询条件的回显
  3. 重庆建筑工程职业学院计算机应用技术专业,2019重庆建筑工程职业学院专业介绍...
  4. Android全局异常捕捉器
  5. FIL的手续费是怎么计算的
  6. 音视频开发---MP4格式详解
  7. EEPROM24C02概述
  8. 读取DNA甲基化IDAT文件
  9. php运行java(安装php-java-bridge)
  10. Android实现高德地图定位详细流程