java写的 8数码程序

思路:
先要解决下列问题:
如何表示节点?
如何扩展节点?
如何判断找到了目标节点?
最终路径是什么?

我设计了如下的类 :
EightPuzzle(算法类,有深度优先算法,宽度优先算法,A启发式搜索,打印结果的方法等,内部有open,closed表,
  目标状态,初始状态)
Node (节点类,内部包含指向父节点的引用 parent,和指向子节点的引用 Children 是一个集合,fn,dn
  wn 并实现了Comparable 接口,支持排序)
Chart (8数码类,继承自Node类,包含计算 不再位数目的方法,上下左右移动的方法,扩展节点的方法,
  判断是否为父节点的方法(递归实现),打印的方法)
Position (位置类,包含位置坐标和位于其上的数字,0代表空格)每一个chart都有9个position
Graph (图类,用于保存所有节点)

如果不在位数目为0 则认为找到了目标节点。
通过移动空格 生成不同的Chart 就是子节点
最终路径 closed表中的节点。

在这些问题解答之后,可以写一个宽度优先算法,然后在宽度优先算法的基础上,写A启发式搜索算法。

参见教参(《人工智能》马少平,朱小燕 编著)

EightPuzzle 类

import 和 class EightPuzzle

Node类

class Node

Chart类

class Chart

Position类

Code

Graph类

class Graph

程序入口类

Main

posted @ 2008-12-05 12:28  sunmoonone  阅读(519)  评论(0编辑  收藏  举报