码迷,mamicode.com
首页 > 其他好文 > 详细

使用深度优先+递归+剪枝解决八皇后问题

时间:2019-09-30 16:38:49      阅读:112      评论:0      收藏:0      [点我收藏+]

标签:range   board   gen   col   int   for   row   解决   move   

n = 4 # 以4皇后举例

result = []
# 放置互斥的列、左斜线、右斜线信息
cols= set()
pie = set()
na = set()

def dfs(row, state):
    
    if row >= n:
        result.append(state)

    for col in range(n):
        if col in cols or row + col in pie or row - col in na:
            continue
        
        cols.add(col)
        pie.add(row + col)
        na.add(row - col)
        
        dfs(row + 1 , state + [col])
        
        cols.remove(col)
        pie.remove(row + col)
        na.remove(row - col)


def generate_result():
    board = []
    for data in result:
        
        for i in data:
            board.append("." * i + "Q"+"."*(n-i-1))
    return [board[i:i+n] for i in range(0,len(board),n)]

dfs(0,[])

print(generate_result())

使用深度优先+递归+剪枝解决八皇后问题

标签:range   board   gen   col   int   for   row   解决   move   

原文地址:https://www.cnblogs.com/yeni/p/11613072.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!