社区讨论

【PY3】最后三个点TLE,我谔谔,有没有佬教教剪枝,呜呜呜。

P1219[USACO1.5] 八皇后 Checker Challenge参与者 4已保存回复 5

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
5 条
当前快照
1 份
快照标识符
@locmhcei
此快照首次捕获于
2023/10/30 16:12
2 年前
此快照最后确认于
2023/11/05 03:18
2 年前
查看原帖
PYTHON
#来了,是八皇后!
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)

回复

5 条回复,欢迎继续交流。

正在加载回复...