n皇后问题
1.问题描述
根据n皇后问题,返回n皇后不同解决方案的数量,而不是具体的放置布局
2.问题实力
输入n=4,则输出结果为2,输入n=6的时候,输出的结果为4
3.代码实例
class Solution:
total = 0 # 定义一个全局变量,用于记录解的个数
n = 0 # 定义一个全局变量,用于记录输入的n值
def atack(self, row, col):
# 判断当前位置是否受到攻击
for c, r in self.cols.items():
# 如果在同一斜线上,则返回True
if c - r == col - row or c + r == col + row:
return True
return False
def search(self, row):
# 深度优先搜索
if row ==self.n:
# 如果已经搜索到最后一行,则解的个数加1
self.total += 1
return
for col in range(self.n):
# 遍历每一列
if col in self.cols:
# 如果当前位置已经有皇后,则跳过
continue
if self.atack(row, col):
# 如果当前位置受到攻击,则跳过
continue
# 将当前位置标记为皇后
self.cols[col] = row
# 继续搜索下一行
self.search(row + 1)
# 回溯,将当前位置标记为空
del self.cols[col]
def totalNQueens(self, n):
# 初始化全局变量
self.n = n
self.cols = {}
# 开始搜索
self.search(0)
# 返回解的个数
return self.total
# 主函数
if __name__ == "__main__":
solution = Solution()
num = int(input("请输入num的值:"))
solution.n = num
solution.totalNQueens(num)
print("输入:", solution.n)
print("输出:", solution.total)