LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 751|回复: 5

用bash完成八皇后問題(ZT)

[复制链接]
发表于 2005-5-13 11:35:15 | 显示全部楼层 |阅读模式
  1. #/bin/bash
  2. canSet() {                                  # 檢查是否可放下皇后的子程序.
  3.         for ((n=0;n<y;n++)) ;do               
  4.                 ((P[$n] == x)) && return 1    # 檢查是否同一行, 如果是返回1 false
  5.                 ((P[$n] == x - n + y )) && return 1 #檢查斜行.
  6.                 ((P[$n] == x + n - y )) && return 1 #檢查另一方向斜行.
  7.         done
  8.         return 0  # 返回成功.
  9. }
  10. # init
  11. y=0   # y 是行,
  12. for((i=0;i<8;i++)) ;do
  13.         P[$i]=-1      # p 是座位array , -1是不在棋盤上.
  14. done

  15. while (((y<8)&&(y>=0)));do   #如果y>=8, 即找到結果, 如果y<0, 即找不到結果, 退出迴圈
  16. #       echo ${P[*]};    # 打開這一注解,可看script 運行過程
  17.         f=0            # 設flag = 0, 用它檢查否一整能不能放下皇后
  18.         s=${P[$y]}+1     # 每一行皇后放下的列位罝+1
  19.         for ((x=s;x<8;x++)); do   #其他shell 用 for x in seq $s 7
  20.                 if canSet ;then   #如果可放下, 則
  21.                         P[$y]=$x  #記下皇后位罝
  22.                         ((y++))    # 行位罝加1, 如用其他shell, 用 y=`expr $y + 1`代替
  23.                         f=1     #設flag=1,即可效皇后.
  24.                         break    #處理下一個皇后
  25.                 fi
  26.         done
  27.         if [ $f -eq 0 ];then  #  如果整行都不能放下皇后.則
  28.                 P[$y]=-1   #將皇后由棋盤上拿下.
  29.                 ((y--))     #行位罝-1.
  30.         fi
  31. done
  32. echo ${P[*]}; 打印數據
复制代码
发表于 2005-5-13 11:50:28 | 显示全部楼层
只有一个解?
回复 支持 反对

使用道具 举报

发表于 2005-5-13 13:07:30 | 显示全部楼层
不知道!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-5-13 14:01:59 | 显示全部楼层
不止吧
回复 支持 反对

使用道具 举报

发表于 2005-5-13 16:04:54 | 显示全部楼层
Post by zhy2111314
不错

难道你们。。。
都说什么???
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-5-13 17:01:22 | 显示全部楼层
Post by genv
难道你们。。。
都说什么???
〖问题描述〗
在一个8×8的棋盘里放置8个皇后,要求每个皇后两两之间不相"冲"(在每一横列竖列斜列只有一个皇后)。


呵呵,看看这里:
http://www.linlins.com/linlin3/q8.htm
其实是这样:
著名的八皇后问题。八个皇后在排列时不能同在一行、一列或一条斜
线上。在8!=40320种排列中共有92种解决方案。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表