使用深度优先+递归+剪枝解决八皇后问题
Posted yeni
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用深度优先+递归+剪枝解决八皇后问题相关的知识,希望对你有一定的参考价值。
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())
以上是关于使用深度优先+递归+剪枝解决八皇后问题的主要内容,如果未能解决你的问题,请参考以下文章
LeetCode 31:递归回溯八皇后全排列一篇文章全讲清楚