输出所有解

global N
N = 4def printSolution(board):for i in range(N):for j in range(N):print(board[i][j], end="")print()print()def isSafe(board, row, col):for i in range(col):if board[row][i] == 1:return Falsefor i, j in zip(range(row, -1, -1), range(col, -1, -1)):if board[i][j] == 1:return Falsefor i, j in zip(range(row, N, 1), range(col, -1, -1)):if board[i][j] == 1:return Falsereturn Truedef solveNQUtil(board, col):if col >= N:printSolution(board)else:for i in range(N):if isSafe(board, i, col):board[i][col] = 1solveNQUtil(board, col + 1)board[i][col] = 0return Falsedef solveNQ():# 写成这样更具适应性# board = [[0 for i in range(N)] for j in range(N)]board = [[0, 0, 0, 0],[0, 0, 0, 0],[0, 0, 0, 0],[0, 0, 0, 0]]if not solveNQUtil(board, 0):print("Solution does not exist")return FalseprintSolution(board)return Trueif __name__ == "__main__":solveNQ()# output
# 0010
# 1000
# 0001
# 0100# 0100
# 0001
# 1000
# 0010

若只需要找出一个解,则稍稍改一下即可

global N
N = 4def printSolution(board):for i in range(N):for j in range(N):print(board[i][j], end="")print()print()def isSafe(board, row, col):for i in range(col):if board[row][i] == 1:return False# 检查对角线(左上角)是否有冲突for i, j in zip(range(row, -1, -1), range(col, -1, -1)):if board[i][j] == 1:return False# 检查对角线(左下角)是否有冲突for i, j in zip(range(row, N, 1), range(col, -1, -1)):if board[i][j] == 1:return Falsereturn Truedef solveNQUtil(board, col):if col >= N:# printSolution(board)return Truefor i in range(N):if isSafe(board, i, col):board[i][col] = 1# 有变动的地方if solveNQUtil(board, col + 1):return Trueboard[i][col] = 0return Falsedef solveNQ():# board = [[0 for i in range(N)] for j in range(N)]board = [[0, 0, 0, 0],[0, 0, 0, 0],[0, 0, 0, 0],[0, 0, 0, 0]]if not solveNQUtil(board, 0):print("Solution does not exist")return FalseprintSolution(board)return Trueif __name__ == "__main__":solveNQ()# output
# 0010
# 1000
# 0001
# 0100

回溯法 n皇后 python 解法一相关推荐

  1. 一、试探回溯法(N皇后问题)

     一.试探回溯法概念 在介绍试探回溯法的概念之前,先简要介绍一个简短的古希腊神话故事,邪恶的半人半牛藏身于一个复杂的迷宫,很难找到它并杀死它,就是能成功杀死它怎么回来也是个难事.不过,在公主阿里阿德涅 ...

  2. Leetcode回溯法四板一解模板

    文章目录 1 通用回溯法模板 2 回溯法常用四板斧+一解(first索引+inPath+sort相邻去重+set非相邻去重) 附录:本专题刷题列表 致谢 1 通用回溯法模板 vector<xxx ...

  3. 3.2 回溯法—N皇后问题

    1. 问题描述 在n×nn\times nn×n的棋盘上摆放nnn个皇后,使任意两个皇后都不能处于同一行.同一列或同一斜线上 2. 问题分析 下以求解4皇后问题为例,分析4皇后问题的排列树以及回溯过程 ...

  4. c支限界算法语言n皇后问题分,算法(八)-回溯法-N皇后问题

    问题描述: 算法思想: 代码实现: #include using namespace std; class Queen { friend int nQueen(int);//求解八皇后 private ...

  5. 回溯法——N皇后问题

    N皇后问题即给一个n*n方格,将n个皇后放进去,要求皇后不能出现在同一列,同一行,也不能出现在对角线上,换句话说,只有折线才可能连接两个皇后.我们拿四皇后来举例: 如图1,第三行的皇后放第一个各格子的 ...

  6. 算法设计与分析——回溯法——n皇后问题

    一.什么是N皇后问题? 在n×n格的棋盘上放置彼此不受攻击的n个皇后.按照国际象棋的规则,皇后可以攻击与之处在同一行或同一列或同一斜线上的棋子.n后问题等价于再n×n的棋盘上放置n个皇后,任何2个皇后 ...

  7. 递归回溯法求数独全部解

    项目介绍 QT5做的数独求解程序,可以判断数独解的个数(如果非唯一解). 运行截图 源码说明 使用MSVC + QT5平台,故* .cpp和* .h文件均采用UTF8 + BOM编码.如果切换到Min ...

  8. 回溯法 —— 判断子集和问题是否存在解

    判断子集和问题是否存在解 分析思路: 采用回溯法针对问题存在解时求出相应的一个或多个解,或者最优解.如果需要判断问题是否存在解(一个或者多个),可以将求解函数改为bool型,当找到任何一个解时返回tr ...

  9. 回溯法(backtracking algorithm)求解N皇后问题(N-Queens puzzle)

    转载自:用回溯法(backtracking algorithm)求解N皇后问题(N-Queens puzzle) N皇后问题 八皇后问题,是一个古老而著名的问题.该问题是国际西洋棋棋手马克斯·贝瑟尔于 ...

最新文章

  1. this指针的用法详解
  2. 远程命令执行与代码执行(remote command/code execute)漏洞总结
  3. Lombok开发指南
  4. 【互联网周刊】2022年第6期摘录
  5. Hadoop学习入门(二)——部署关键问题1:OpenSSH 密钥管理(1)
  6. JavaScript中变量的类型
  7. Android System ANR caused SWT restart issue
  8. 交叉编译ghostscript-9.53.3
  9. qt 设置按钮大小_QT使用教程(四)之初体验
  10. echarts label固定位置_echarts 饼状图调节 label和labelLine的位置
  11. [转帖]*野外生活手册~
  12. 计算机基础必修上课是上机吗,关于大学计算机基础论文范文集,与上海财经大学国际工商管理学院相关毕业论文范文...
  13. 王者荣耀账号转服务器,王者荣耀账号如何跨系统转移
  14. 新款 MacBook Pro 评测:更好的性能、免费的刘海和更好的显示器
  15. ns的安装与使用及tcl的入门学习
  16. Linux之命令scp远程拷贝文件
  17. 球迷必备:2012欧洲杯手机观战指南
  18. 怎样判断一个整数是不是回文数?
  19. 制作中英文双语(多语)网站教程, 0基础1小时WordPress建站视频课程 (一步步建站, 一步也不少)
  20. cv2.polylines()

热门文章

  1. 一篇令所有游戏圈的兄弟汗颜的文章
  2. win10系统administrator账户密码忘记
  3. PLC模拟量输入 模拟量转换FB S_ITR(三菱FX3U)
  4. 我眼中的《芳华》读后感作文2500字
  5. Cloud Programming Simplified: A Berkeley View on Serverless Computing
  6. 如何解决WARNING C4996问题
  7. matlab cond含糊,入坑MATLAB必会的吐血总结
  8. 3070网卡驱动linux教程,Ubuntu 12.04下RT5370无线网卡驱动安装
  9. SyGate4.0实现局域网共享上网
  10. Nagios配合飞信发短信