美文网首页
八数码实现

八数码实现

作者: 小星star | 来源:发表于2019-02-11 15:18 被阅读0次

闲来无事,把八数码实现一下:BFS,DFS,A*

原理也没什么好说的,记录一下写代码遇到的问题。

  • 状态的判重 我的八数码Status类中包含一个String code—也就是当前状态的情况,如“123456780” ->
    1 2 3
    4 5 6
    7 8
    主要是标识出每个状态的 唯一性,第一次写的时候,判重的代码写错了,没有裁剪状态,直接 out of memory,运行只能求出最多15步的复原,而且花了很长时间。
    之后 我意识到了判重,先后采用了 string的hashcode直接生成一个int型的标识,或者直接将这个string来进行判断也可以。完成判重后基本可以在500ms内得到解决。A*的话100ms左右。
    听说还有个康托方法???
    八数码的八重境界
  • 八数码是否可解
    求逆序数。
    1. 如何求逆序数
      3756412的逆序数
      在3后面比它小的有2个,逆序数为2
      在7后面比它小的有5个,逆序数为5
      在5后面比它小的有3个,逆序数为3
      在6后面比它小的有3个,逆序数为3
      在4后面比它小的有2个,逆序数为2
      在1后面比它小的有0个,逆序数为0
      所以序列的逆序数有2+5+3+3+2=15
    2. 在八数码中 我的目标状态为 [1,2,3,4,5,6,7,8,0]
      1 2 3
      4 5 6
      7 8
      将这个0去掉,它代表这空格。得到他的逆序数为0,是偶数,那么对于任意一个序列,如[5,1,7,4,3,0,8,6,2]
      将其中的0去掉,得到[5,1,7,4,3,8,6,2]可以算得他的逆序数为14,是偶数,所以能够转化到目标状态。

相关文章

  • 八数码实现

    闲来无事,把八数码实现一下:BFS,DFS,A* 原理也没什么好说的,记录一下写代码遇到的问题。 状态的判重 我的...

  • 数字能量学之《八星数组作用规律》

    八星数码: 生气数码,延年数码, 天医数码,㐲位数码, 绝命数码,五鬼数码, 六煞数码,祸害数码, 一、能量大小的...

  • 八数码

    八数码,BFS模板题,不做人生不完整

  • 八数码

    这道题是Acwing上面845题. 八数码是一道bfs的扩展应用。这道题主要是你能够把整个二维数组抽象成一个str...

  • 51单片机、动态数码管认识与编程

    一、根据电路图实现动态数码管 1. 对于动态数码管 首先需要知道的是,动态数码管是一种对数码管的实现方式,并不是数...

  • 八数码问题

    Note:实现代码之前可以先写出伪代码,可以节省很多时间。编程语言只是一种实现工具。

  • Python 七段数码管绘制

    数码管是一种半导体发光器件,数码管可分为七段数码管和八段数码管,区别在于八段数码管比七段数码管多一个用于显示小数点...

  • 【C51单片机期末复习整理系列】[四]八段数码管的选择与显示

    分两个版本,实现的功能类似 注意:要想八个八段数码管都显示内容则必须将延时降低并且方式是来回快速刷新

  • 八数码(BFS解法)

    题目链接[https://www.luogu.com.cn/problem/P1379] 采用BFS思路解决八数码...

  • 51单片机之数码管静态显示,锁存器的使用

    八段数码管显示原理 八段数码管由8颗LED组成,根据LED的接法,数码管可分为共阴极和共阳极 共阴极是指每一颗LE...

网友评论

      本文标题:八数码实现

      本文链接:https://www.haomeiwen.com/subject/oyeqeqtx.html