Python解N皇后问题

while 1: #一直循环
    n = input('Input N:') #输入皇后个数
    if n.lower() in ('exit'): #输入exit退出
        break
    n = int(n)
    queenList = [0]*n #初始化一个长度为n的list,用于存放皇后,值代表皇后位置
    #因为每行只可能有1个皇后,所以没必要用2维list
    
    def setQueen(idx): #递归,用于放置每一行的queen,idx是行号
        for i in range(n): #皇后位置从0到n-1取值
            isOk=True
            for j in range(idx): #循环判断这一行之前的所有行
                if i in (queenList[j],queenList[j]-idx+j,queenList[j]+idx-j):#在直线和斜线上
                    isOk=False
                    break
            if isOk: #如果跟之前的行都不在线上
                queenList[idx]=i #在此位置放置一个皇后
                if idx==n-1: #已经是最后一行
                    print(queenList) #打印结果
                else: #不是最后一行
                    setQueen(idx+1) #继续放置下一行

    setQueen(0) #从第一行开始放置

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

於黾

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值