java写的 n皇后程序

这学期人工智能有两个实验,n皇后和8数码的搜索算法实现,很多同学到网上找了程序就交了。但是我觉得这样做虽然省事,于与自己除了不丢学分之外,百害而无一利。作为学习编程这个专业的学生,我觉得解决问题的能力要有的,而且靠解决问题来提高自己的信心和兴趣是很重要的。很多同学由于不愿要煞费脑筋的去解决有难度的实验,结果造成快毕业了也不能入门,更不用提专业技能和热爱了。

 

  上边这一段话,是鄙人的感受和如何对待学习的见解,一己之见。下面就把我的程序贴上来,也是自己研究课本之后按自己的想法做得,有没有什么重大的错误,还不知道。希望感兴趣的朋友,能针对算法,java的应用技巧,原则以及程序的不足提些意见。

(用Eclipse写的java控制台程序)

关键思路

首先,找到以下几个名词用程序怎么表示或者说表达:
规则(rules),不合法(dead), 路径(path),状态(state)

1.针对n皇后的问题,我将棋子的位置集合作为规则集合(rules)
2.路径同样是有先后顺序的位置的集合(实际上棋子怎么放,顺序不重要,但搜索要按一定的顺序进行)
3.某棋子不合法就是棋子能和已经加入到规则集合中的棋子互吃(kill)
4.实际上我将棋子简单的看成了点(看上去不像状态,但和课本上递归过程中的状态对应),具有x,y坐标,
  这样就可给出棋子互吃的表达,进而可以验证是否合法。
   
另外递归过程,课本上已经给出了(《人工智能》马少平,朱小燕 编著),我就按这个过程,只是给出递归内部调用的具体方法的定义,然后依序调用
并用合适的结构存储集合和路径。

import

SearchPath类

class SearchPath

Queen类,既是状态,也是棋子

class Queen

Solution类,存放解决方案的集合,是对ArrayList的包装

class Solution

NQueenException异常类,这个类没有必要写的

class NQueenException

程序入口类Main,包含main函数,接受输入并调用搜索算法进行搜索,并打印结果。

class Main

 

posted @ 2008-12-05 11:59  sunmoonone  阅读(481)  评论(1编辑  收藏  举报