N皇后问题

class Queens:
    def __init__(self,num=8):
        """
        传入num指定方格尺寸
        :param num: 
        """
        self._find = False
        self._num = num
        self._result = [None]*self._num
        self.lay_queen(0)
    def lay_queen(self,row):
        if row == self._num:
            # 找到了一组解
            self._find = True
            self.print_queens()
            return
        if self._find:
            # 当前已经找到了一组解则不再继续
            return
        if row<self._num:
            col = 0
            while col < self._num:
                #还未找到解
                if self.is_ok(row,col):
                    self._result[row]=col
                    self.lay_queen(row+1)
                col+=1
    def is_ok(self,row,col):
        if row==0:
            return True
        upleft = col - 1
        upright = col + 1
        for r in range(row-1,-1,-1):
            if self._result[r]==col:
                return False
            if upleft>=0:
                if self._result[r]==upleft:
                    return False
            if upright <=self._num-1:
                if self._result[r]==upright:
                    return False
            upright+=1
            upleft-=1
        return True

    def print_queens(self):
        print(self._result)

if __name__ == '__main__':
    q = Queens(4)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值