python实现八皇后问题(百练OJ:2754:八皇后)

题目链接:八皇后

描述

会下国际象棋的人都很清楚:皇后可以在横、竖、斜线上不限步数地吃掉其他棋子。如何将8个皇后放在棋盘上(有8 * 8个方格),使它们谁也不能被吃掉!这就是著名的八皇后问题。 
对于某个满足要求的8皇后的摆放方法,定义一个皇后串a与之对应,即a=b 1b 2...b 8,其中b i为相应摆法中第i行皇后所处的列数。已经知道8皇后问题一共有92组解(即92个不同的皇后串)。
给出一个数b,要求输出第b个串。串的比较是这样的:皇后串x置于皇后串y之前,当且仅当将x视为整数时比y小。
输入
第1行是测试数据的组数n,后面跟着n行输入。每组测试数据占1行,包括一个正整数b(1 <= b <= 92)
输出
输出有n行,每行输出对应一个输入。输出应是一个正整数,是对应于b的皇后串。
样例输入
2
1
92

样例输出

15863724
84136275
def queen(A, cur=0):

    if cur==len(A):
        #这里len(A)的值为8,当发现cur==8时候,
        # 说明前面的0-7都已经找到了正确的位置,
        # 这就是一个满足要求的结果
        b.append(list(A))
    else:
        for col in range(len(A)):
            A[cur] = col #表示把第cur行的皇后放在col列上

            ok = True  #用ok这个值来记录是否冲突

            #以下这个for 循环判断是判断 第cur行是否更前面的皇后冲突
            for r in range(cur):
                if A[r]==col or r-A[r]==cur-A[cur] or r+A[r]==cur+A[cur]:#判断是否跟前面的皇后冲突
                    ok = False  ##一旦发现冲突标记一下
                    break       ##一旦发现冲突标记一下之后停止计算
            if ok:
                #若是发现了跟前面的皇后冲突了,说明当前cur行是不能放在col列上面的,
                # 于是就 进行下一次的  for col in range(len(A))循环,也就是去测下一个col值行不行
                #若是发现当前行的cur的col没有与前面的冲突,那么就开始对下一行寻找合适放置位置即寻找col值
                queen(A,cur+1)

b=[]  #用来存储所有的解决方案
queen([0]*8, 0)

#以下操作实现题目的输出要求
n=int(input())
for i in range(n):
    x=int(input())
    a=b[x-1]
    for j in range(8):
        print(a[j]+1,end="")
    print()



  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

康雨城

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

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

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

打赏作者

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

抵扣说明:

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

余额充值