大学时写的求解算法效率有点低,以横刀立马棋局求解极限约为1.5s因此根据重写一遍,目前只有java版本的 go版本的也写了

在最初的版本中,只考虑了关羽固定为横,四上将固定为竖的设计,不能符合全部的情形,因而重写。
依旧按照原来思路对棋局进行压缩,省掉了对四上将与曹操的坐标压缩,简化了计算过程,每个棋子横坐标为2位,纵坐标为3位,共十个棋子,总计50位。使用5位记录棋子的横竖方向和坐标加起来一共55位,小于long类型的64位。

求解算法方面
依旧是采用分支限界法进行求解,使用广度优先算法建立树并同步进行判定和剪枝。求解完成时间停止建树,以此来保证此解为全局最优解。
简单来说就是 BFS 方法搜索,采用数组模拟整个棋盘,剪枝的方式为对棋局求取特征值,对于具备相同特征的棋局,不再进行建树求解。

懒得做界面了,纯java命令行模式,可在idea中直接打开。
go版本的同理。

另外将所有可行的棋局都用枚举的方法计算出来了,数字代表的是横方向和总方向棋子的数量

github链接

使用缓存已经生成的棋局,单线程的极限速度要高于多线程的极限速度,可能是因为线程间的切换影响了求解的速度,在进行多棋局求解时,单线程明显优于多线程(每种类型的开局状态都已经求出了,可以根据开局自带的字典生成随机棋局),在单个棋局求解时,多线程相较于单线程稳定,都在300ms左右,单线程的速度也和多线程差不多(cpu : 10210U),go版本的速度约70ms,多线程也并未能有明显的进步,反而因为写的不规范造成几率死锁。

华容道的求解算法重写相关推荐

  1. 广度优先求解算法演示(华容道C++代码,速度2644组/秒)

    最近<数据结构>课程接近尾声,大作业已经有半数同学提交了.对深度优先搜索上次课(12月23号)我做了讲解,完成的还不错.只是大家要注意几点: 使用python的同学,曹老师会统一讲解. 使 ...

  2. 技术图文:排序技术在求解算法题中的应用

    背景 前段时间,在知识星球立了一个Flag,这是总结Leetcode刷题的第五篇图文. 理论部分 C# 中的排序 对集合类的排序,我们通常使用位于 System.Core 程序集,System.Lin ...

  3. 二分图的匹配问题以及求解算法

    概念 二分图:二分图又称作二部图,是图论中的一种特殊模型. 设G=(V,E)是一个无向图,如果顶点V被分割为两个互不相交的顶点子集(A,B),并且边集E中的每条边(vi,vj)所关联的两个顶点vi和v ...

  4. 数学大神攻克猜字游戏Wordle,求解算法成绩逼近理论极限,连信息论都用上了...

    梦晨 发自 凹非寺 量子位 | 公众号 QbitAI 免费猜字小游戏Wordle正在席卷全球,火到以数百万美元的价格被收购,全球玩家数量也突破了200万. 如果你在微博.微信等地方看到这些神神秘秘的方 ...

  5. 第四章 分治策略 4.1 最大子数组问题 (暴力求解算法)

    /*** 最大子数组的暴力求解算法,复杂度为o(n2)* @param n* @return*/static MaxSubarray findMaxSubarraySlower(int[] n) {l ...

  6. 基于点特征的各位姿求解算法对比(pose-estimation-compared)

    基于点特征的位姿求解算法: (1)非迭代:P3P . P4P . RPnP (2)迭代:正交迭代(OI)算法 . L-M 算法 . SoftPOSIT 算法 . Tsai算法(初始解不迭代,精确解迭代 ...

  7. 迷宫求解 java_迷宫求解算法(java版)

    迷宫求解算法一直是算法学习的经典,实现自然也是多种多样,包括动态规划,递归等实现,这里我们使用穷举求解,加深对栈的理解和应用 定义Position类用于存储坐标点 起点坐标为(1,1),终点坐标为(8 ...

  8. 原根求解算法 NTT算法

    原根求解算法: 获取一个数\(N\)的原根\(root\)的算法 #include<bits/stdc++.h> #define ll long long #define IL inlin ...

  9. 【浅析华容道之一】华容道的前世今生

    先放张图片 背景介绍 智力游戏界的不可思议 古老的中国游戏,以其变化多端.百玩不厌的特点与魔方.独立钻石棋一起被国外智力专家并称为"智力游戏界的三个不可思议". 历史出处 华容道原 ...

最新文章

  1. 拼手速抢红包!送大家现金红包!
  2. 安装 Dubbo 管 理 控 制(二)
  3. 《MINECRAFT我的世界 新手完全攻略(第3版)》一1.4 关于快照版
  4. 参加Tech.Ed 2006北京行
  5. 基于 vue2 导航栏透明渐变
  6. 从无到有整合SpringMVC-MyBatis项目(1):搭建JavaWeb项目
  7. UWP ListView 绑定 单击 选中项 颜色
  8. linux qt 甘特图,qt绘制甘特图
  9. 以太网的CSMA/CD协议
  10. 深度学习方法在糖尿病视网膜病变诊断中的应用
  11. 27个最佳Beaver Builder主题和模板(2020)
  12. 【信息安全案例】——身份与访问安全(学习笔记)
  13. 将SSH多次登录失败的IP加入黑名单
  14. 爬虫项目代理操作和线程池爬取
  15. cesium--绘制多边形polygon
  16. 18.NET高级开发之ORM-EF6
  17. 计算机组成原理 关于CPU中的LDAC和STAC指令
  18. thinkcmf5.1项目实现pc端和wap手机端自动切换
  19. windows+mysql集群搭建-三分钟搞定集群
  20. c语言双缓冲怎么用,C语言游戏编程:GDI怎么实现双缓冲绘图去掉闪烁

热门文章

  1. 第十五课(1)Nor FLash原理及硬件介绍
  2. 从远程仓库拉取最新代码合并到本地分支
  3. 贵州酒店集团特产券解析
  4. psychopy coder模式编写心理试验程序 图片呈现和量表评分
  5. 转载:利用正则表达式排除特定字符串 - 薰衣草的旋律 - 博客园
  6. React+Typescript实现一个甘特图表格
  7. 异常断电或关机引起磁盘元数据损坏解决方案
  8. 《TIME》2008年50个最佳网站
  9. python决策树剪枝_决策树剪枝问题python代码
  10. AB test 中的AA test有什么作用?