Chinaunix首页 | 论坛 | 博客
  • 博客访问: 103696033
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-04-18 21:23:32

作者:kkng09   
#/bin/bash 
canSet() {                                  # 檢查是否可放下皇后的子程序. 
        for ((n=0;n                ((P[$n] == x)) && return 1    # 檢查是否同一行, 如果是返回1 false 
                ((P[$n] == x - n + y )) && return 1 #檢查斜行. 
                ((P[$n] == x + n - y )) && return 1 #檢查另一方向斜行. 
        done 
        return 0  # 返回成功. 

# init 
y=0   # y 是行, 
for((i=0;i<8;i++)) do 
        P[$i]=-1      # p 是座位array , -1是不在棋盤上. 
done 

while (((y<8)&&(y>=0)));do   #如果y>=8, 即找到結果, 如果y<0, 即找不到結果, 退出迴圈 
#       echo ${P[*]};    # 打開這一注解,可看script 運行過程 
        f=0            # 設flag = 0, 用它檢查否一整能不能放下皇后 
        s=${P[$y]}+1     # 每一行皇后放下的列位罝+1 
        for ((x=s;x<8;x++)); do   #其他shell 用 for x in seq $s 7 
                if canSet then   #如果可放下, 則 
                        P[$y]=$x  #記下皇后位罝 
                        ((y++))    # 行位罝加1, 如用其他shell, 用 y=`expr $y + 1`代替 
                        f=1     #設flag=1,即可效皇后. 
                        break    #處理下一個皇后 
                fi 
        done 
        if [ $f -eq 0 ];then  #  如果整行都不能放下皇后.則 
                P[$y]=-1   #將皇后由棋盤上拿下. 
                ((y--))     #行位罝-1. 
        fi 
done 
echo ${P[*]}; 打印數據 
阅读(427) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~