续第一部分《

上图演示了两种布局的存储结构。棋子总共分成5类,分别是最大子、横放、竖放、卒以及空格(在这里将空格认为是一个棋子)。将最大子记做A,单独存储。其它4种棋子可以使用两个二进制位来描述,分别是:

00-空格, 01-卒, 10-竖放, 11-横放

一个布局共有此类子(含空格)11个,共占用22个二进制位。A子用4个二进制位来记录(可表示16种变化),其取值可以是十进制1~12中的一个,表示A子在所有棋子中的位置。因此,一盘布局仅需26个二进制位,其余6个二进制位作为保留位。

在棋子排放上,从棋盘左上角开始,每个棋子的摆放位置都选取最小可用的行、列坐标位置作为摆放位置(如图),并在合适的时候插入A子(根据A的顺序号)。

这样,一个布局仅需一个Int32就可以记录下来。在后面的内容中,不管是建立AVL平衡树还是广度优先的搜索算法都是针对Int32进行的。一个布局可以和一个整数相互转换(在后续内容中将给出代码实现方案)。


五、 基本算法描述

华容道求解过程不外乎罗列所有可能的走法,采用广度优先的树形结构进行计算机搜索,当搜索到符合解的布局时便终止搜索。并从树型结构中追溯出解题的全过程。因此需要每个布局保留一个指向上步布局的引用。为了保证合理的内存使用,每次都要检索当前布局是否在前面已经出现过,如果有重复布局,则自动剔除。用图形的方式描述出来便是:

华容道与数据结构 (1)

在后续的章节中,我们将应用数据结构的知识来构建华容道求解过程中所需要的数据结构,内容将涉及链表、树、AVL平衡树、堆栈等结构,尽量在确保合理内存占用的情况下简化计算机求解过程。

相关文章:

  • 2021-09-21
  • 2021-08-01
  • 2021-08-24
  • 2021-10-22
  • 2021-08-14
  • 2021-11-05
  • 2021-05-19
猜你喜欢
  • 2021-11-19
  • 2022-02-04
  • 2021-10-03
  • 2021-12-12
  • 2022-03-09
相关资源
相似解决方案