【PY3】最后三个点TLE,我谔谔,有没有佬教教剪枝,呜呜呜。
查看原帖
【PY3】最后三个点TLE,我谔谔,有没有佬教教剪枝,呜呜呜。
218454
Miting楼主2021/2/13 20:30
#来了,是八皇后!
k = int(input())
bloc = []
bloc = [0 for i in range(k)]
table = [bloc[:] for i in range(k)]

#记录下答案
answer_number = 0

#代码重构times:5

#检查某个格子是否可以合法放置
def check(matrix,x,y):
    

    for i in range(k):
        if matrix[i][y] == 1: return False
    
    i, j = x-1, y-1
    while i>= 0 and j>=0:
        if matrix[i][j] == 1: return False
        i-=1
        j-=1
    
    i,j = x-1,y+1
    while i>=0 and j<k:
        if matrix[i][j] == 1: return False
        i-=1
        j+=1

    return True
          
#DFS函数

def DFS(row):
    
    if row == k :
        global answer_number
        answer_number+=1
        if answer_number < 4:
            for i in range(k):
                for j in range(k):
                    if table[i][j] == 1: print(j+1,end = ' ')
            print()
        return
    
    for i in range(k):
        if check(table,row,i):
            table[row][i] = 1
            DFS(row+1)
            table[row][i] = 0

DFS(0)
print(answer_number)
2021/2/13 20:30
加载中...