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

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

[code:1]#/bin/bash
canSet() {                                  # 檢查是否可放下皇后的子程序.
        for ((n=0;n<y;n++)) ;do               
                ((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[*]}; 打印數據[/code:1]
什么是八皇后问题?
把chg1226拖出去打! 居然问这种弱智问题!   

HOUSCOUS, 这个可是一个好东西!
难道不知道还不让问了吗
8皇后问题????????
皇后有8个
佩服 佩服
就是求在国际象棋盘上面放8个皇后,使它们之间都不被吃掉的摆法。国际象棋中皇后拥有八个方向的行走权,是最强的棋。  
chg1226, 在这里:

http://www.linlins.com/linlin3/q8.htm
answer:

0 4 7 5 2 6 1 3