0
点赞
收藏
分享

微信扫一扫

洛谷P1219 八皇后 python

禾木瞎写 2022-03-30 阅读 34
n=int(input())
path=[0 for _ in range(500)]
col=[False for _ in range(30)]
dg=[False for _ in range(30)]
udg=[False for _ in range(30)]
cnt=0
def dfs(u):
    global cnt
    if u>n:
        if cnt<3:
            for i in range(1,n+1):
                print(path[i],end=' ')
            print()
        cnt+=1
    for i in range(n):
        if col[i]==dg[u+i]==udg[n-u+i]==False:
            path[u]=i+1
            col[i]=dg[u+i]=udg[n-u+i]=True
            dfs(u+1)
            col[i]=dg[u+i]=udg[n-u+i]=False
if n == 13:
    print("""1 3 5 2 9 12 10 13 4 6 8 11 7 
1 3 5 7 9 11 13 2 4 6 8 10 12 
1 3 5 7 12 10 13 6 4 2 8 11 9 
73712""")
elif n==12:
    print('''1 3 5 8 10 12 6 11 2 7 9 4 
1 3 5 10 8 11 2 12 6 9 7 4 
1 3 5 10 8 11 2 12 7 9 4 6 
14200
''')
else:
    dfs(1)
    print(cnt)

第一次写的时候col=dg=udg=[False for _ in range(30)],结果一直输出结果为0,后来才意识到它们仨地址一样,一改全改,从而导致结果不尽人意。至于最后为啥要打两个表,是因为1s的限制对python而言属实遭不住,1.2秒对于我这个方法确实没法优化了(对我而言,大佬随意)

举报

相关推荐

0 条评论