八皇后问题
问题: 国际象棋棋盘是8 * 8的方格,每个方格里放一个棋子。皇后这种棋子可以攻击同一行或者同一列或者斜线(左上左下右上右下四个方向)上的棋子。在一个棋盘上如果要放八个皇后,使得她们互相之间不能攻击(即任意两两之间都不同行不同列不同斜线),求出一种(进一步的)布局方式。
 
【来源: https://www.cnblogs.com/franknihao/p/9416145.html 】具体讲解与实现
 
1 def check(board,row,col):
2 i = 0
3 while i < row:
4 if abs(col-board[i]) in (0,abs(row-i)):
5 return False
6 i += 1
7 return True
 1 def EightQueen(board,row):
2 blen = len(board)
3 if row == blen:
4 print(board)
5 return True
6 col = 0
7 while col < blen:
8 if check(board,row,col):
9 board[row] = col
10 if EightQueen(board,row+1):
11 return True
12 col += 1
13 return False
1 def printBoard(board):
2 import sys
3 for i,col in enumerate(board):
4 sys.stdout.write('□ ' * col + '■ ' + '□ ' * (len(board) - 1 - col))
5 print( )

主函数调用:

1 board = [ [0]*8 for row in range(8) ]
2 EightQueen(board,0)
3 printBoard(board)

运行结果:

1 [0, 4, 7, 5, 2, 6, 1, 3]
2 ■ □ □ □ □ □ □ □
3 □ □ □ □ ■ □ □ □
4 □ □ □ □ □ □ □ ■
5 □ □ □ □ □ ■ □ □
6 □ □ ■ □ □ □ □ □
7 □ □ □ □ □ □ ■ □
8 □ ■ □ □ □ □ □ □
9 □ □ □ ■ □ □ □ □

此代码只能输出一种结果,实际上n皇后问题的解有多种。

最新文章

  1. JQmeter显示进度条
  2. AE唯一值符号化的流程以及过程
  3. 关于DButils的简单介绍
  4. 【笔记】《DirectX 9.0 3D游戏开发编程基础》:Direct3D初始化
  5. JS 在线网站
  6. Android计算时间差
  7. JVM内存回收机制
  8. CoreData Multiple Context性能分析-读书笔记
  9. Java经典案例之-判断质数(素数)
  10. Java中常见的Exception种类
  11. getparameter的使用
  12. Maven设置utf8编码格式
  13. CSOM中如何取到managed metadata类型字段的类型信息
  14. 《征服C指针》读书笔记
  15. python学习笔记——正则表达式regex
  16. SQL语句的增删改查(详细)
  17. 配置安全证书的Etcd集群
  18. Linux LED字符设备驱动
  19. 简化Hadoop命令
  20. ubuntu中设置wireshark抓包

热门文章

  1. 09:CBV与settings
  2. HashMap 中7种遍历方式的性能分析
  3. 《面试补习》- Java集合知识梳理
  4. Redis6使用指导(完整版)
  5. 精尽Spring Boot源码分析 - Condition 接口的扩展
  6. React中使用react-file-viewer,实现预览office文件(pdf,word,xlsx等文件)前端实现
  7. Gym 100008E Harmonious Matrices 高斯消元
  8. CRM客户管理软件如何帮助销售?
  9. buu 红帽杯 XX
  10. git配置多个ssh key