Python实现八皇后问题
2017-05-29 20:42
531 查看
八皇后问题是指8*8位的棋盘上,摆8个皇后,使得任意一个皇后不在其他皇后的同一横线上,同一竖线上,同一斜线(包括右上到左下斜线和左上到右下斜线)上。这个问题是一个经典的递归问题。
#八皇后问题主函数 n = 0 #总的解的数量 def ehh_sovle(deep, graph, path): '''解决八皇后问题的函数''' for i in range(8): if graph[deep][i] == 0: #如果这个点没有灰化,则说明是有效点 path.append((deep + 1, i + 1)) if deep == 7: #如果到了第7层,即对应第八个皇后,则输出路径,跳出此路径 print(path) global n n = n + 1 path.pop() return else: make_gray(graph, deep, i, 0, deep + 1) #灰化 ehh_sovle(deep + 1, graph, path) make_gray(graph, deep, i, deep + 1, 0) #解灰化 path.pop() def make_gray(graph, x, y, oldvalue, newvalue): '''灰化函数,让点(x,y)所在行列,和斜线上的点为不可用,或者解除不可用状态''' for i in range(8): if graph[x][i] == oldvalue: #竖直方向设置为不可用 graph[x][i] = newvalue if graph[i][y] == oldvalue: graph[i][y] = newvalue #横向设置为不可用 slash(graph, x-1, y-1, -1, -1, oldvalue, newvalue) #左斜上方 slash(graph, x+1, y-1, 1, -1, oldvalue, newvalue) #右斜上方 slash(graph, x-1, y+1, -1, -1, oldvalue, newvalue) #左斜下方 slash(graph, x+1, y+1, 1, 1, oldvalue, newvalue) #右斜下方 def slash(graph, x, y, x_increment, y_increment, oldvalue, newvalue): '''斜线方向上,graph为图数组,x为横坐标,y为纵坐标,x_increment为x方向增量, y_increment为y方向增量,oldvalue为老的值,newvalue为新设的值''' xx = x yy = y while -1 < xx < 8 and -1 < yy < 8: if graph[xx][yy] == oldvalue: graph[xx][yy] = newvalue xx += x_increment yy += y_increment mygraph = [[], [], [], [], [], [], [], []] for i in range(8): for j in range(8): mygraph[i].append(0) mypath = [] ehh_sovle(0, mygraph, mypath) print(n)
相关文章推荐
- Python实现八皇后问题
- 八皇后问题之python和scheme实现
- Python基于生成器迭代实现的八皇后问题示例
- python实现八皇后问题
- 【算法】八皇后问题 Python实现
- Python实现N皇后问题
- Import module问题的解决V2与python CGI访问的实现
- 使用Python实现生产者消费者问题
- 2-opt求解TSP(旅行商)问题的python实现
- 利用python的生成器解决八皇后问题
- 八皇后问题,一维数组实现
- 字符串问题python实现(三)
- 杨辉三角问题 Java和Python实现
- python实现简单的汉诺塔问题
- 动态规划之矩阵连乘问题Python实现方法
- Python计算八皇后问题
- Python实现批量处理文件的缩进和转码问题
- Python实现N阶台阶的走法问题
- Python实现N阶台阶的走法问题
- 用Python实现约瑟夫问题