Chinaunix首页 | 论坛 | 博客
  • 博客访问: 612280
  • 博文数量: 239
  • 博客积分: 7941
  • 博客等级: 准将
  • 技术积分: 2467
  • 用 户 组: 普通用户
  • 注册时间: 2010-07-10 12:14
个人简介

及时当勉励

文章分类

全部博文(239)

文章存档

2013年(29)

2011年(22)

2010年(188)

分类:

2010-04-19 00:02:39

TO QUEEN   ;著名的8皇后问题

  DRAW HT MAKE "A ARRAY 9 ;定义数组

  PR TIME ;输出开始的时间

  MAKE "N 0  ;开始时设定解的总数为0

  MAKE "BZ 0 ;设定标志=1时获得正确的解

  FOR "A1 1 8[FOR "A2 1 8[FOR "A3 1 8[FOR "A4 1 8[FOR "A5 1 8[FOR "A6 1 8[FOR "A7 1 8[FOR "A8 1 8[JC]]]]]]]]

  PR TIME ;输出结束的时间

END

TO JC ;检测程序段

  ASET :A 1 :A1 ASET :A 2 :A2 ASET :A 3 :A3 ASET :A 4 :A4

  ASET :A 5 :A5 ASET :A 6 :A6 ASET :A 7 :A7 ASET :A 8 :A8 ;读出组合出的棋子排列

  FOR "L 1 7[FOR "M :L+1 8[IF (AGET :A :L)=(AGET :A :M) THEN[GO "NEXT_]]] ;排除重复数字(排除纵横冲突)

  MAKE "BZ 0

  FOR "I 1 7[FOR "J :I+1 8[PDD :I :J IF :BZ=1 GO "NEXT_]] ;循环检验对角线是否冲突

  IF :BZ=0 THEN PRI ;调用输出答案的过程

  LABEL "NEXT_

END

TO PDD :I :J ;判对角线上是否有冲突断程序段

  IF (:I+AGET :A :I)=(:J+AGET :A :J) THEN[MAKE "BZ 1] ;发现从右上到左下对角线冲突

  IF (:I-AGET :A :I)=(:J-AGET :A :J) THEN[MAKE "BZ 1] ;发现从左上到右下对角线冲突

END

TO PRI ;以文本方式输出棋盘排列

  MAKE "N :N+1  ;解的总数增加1

  TYPE :N TYPE[=] ;TYPE TIME TYPE[=]

  FOR "K 1 8[TYPE AGET :A :K TYPE CHAR 32]PR[] ;画出皇后棋子

END

阅读(474) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~