初学 Python , 写了一个八皇后的小程序,虽然算法效率不高,但这次是第一个用python实现
chess=[[0 for col in range(8)] for row in range(8)]
pos =0
i=0
flag =0
def check(i,pos):
if i==0:
return True
for counter in range(i):
if chess[counter][pos]==1:
return False
for x in range(min(i,pos)):
if chess[i-x-1][pos-x-1]==1:
return False
if pos<7:
for y in range(min(i,7-pos)):
if chess[i-y-1][pos+y+1]==1:
return False
return True
while i<8:
chess[i][pos]=1
if check(i,pos):
i=i+1
pos=0
else:
chess[i][pos]=0
while pos<7 and not check(i,pos):
pos=pos+1
if pos<=7 and check(i,pos):
chess[i][pos]=1
i=i+1
pos=0
else:
if (chess[i-1].index(1))<7:
pos = chess[i-1].index(1)+1
chess[i-1][pos-1]=0
i=i-1
else:
if i>=2:
pos =chess[i-2].index(1)+1
chess[i-1][7]=0
chess[i-2][pos-1]=0
i=i-2
else:
break
if 1 in chess[7]:
flag=flag+1
## print "%d:Found:"%(flag)
##
## for k in range(len(chess)):
## print chess[k]
##
## print
## print "*"*30
if (chess[7].index(1))<7:
pos = chess[7].index(1)+1
chess[7][pos-1]=0
i=7
else:
pos =chess[6].index(1)+1
chess[7][7]=0
chess[6][pos-1]=0
i=6
print "there are %d solutions" %flag
去掉程序中的注释,可以得到全部解:
******************************
90:Found:
[0, 0, 0, 0, 0, 0, 0, 1]
[0, 1, 0, 0, 0, 0, 0, 0]
[0, 0, 0, 0, 1, 0, 0, 0]
[0, 0, 1, 0, 0, 0, 0, 0]
[1, 0, 0, 0, 0, 0, 0, 0]
[0, 0, 0, 0, 0, 0, 1, 0]
[0, 0, 0, 1, 0, 0, 0, 0]
[0, 0, 0, 0, 0, 1, 0, 0]
******************************
91:Found:
[0, 0, 0, 0, 0, 0, 0, 1]
[0, 0, 1, 0, 0, 0, 0, 0]
[1, 0, 0, 0, 0, 0, 0, 0]
[0, 0, 0, 0, 0, 1, 0, 0]
[0, 1, 0, 0, 0, 0, 0, 0]
[0, 0, 0, 0, 1, 0, 0, 0]
[0, 0, 0, 0, 0, 0, 1, 0]
[0, 0, 0, 1, 0, 0, 0, 0]
******************************
92:Found:
[0, 0, 0, 0, 0, 0, 0, 1]
[0, 0, 0, 1, 0, 0, 0, 0]
[1, 0, 0, 0, 0, 0, 0, 0]
[0, 0, 1, 0, 0, 0, 0, 0]
[0, 0, 0, 0, 0, 1, 0, 0]
[0, 1, 0, 0, 0, 0, 0, 0]
[0, 0, 0, 0, 0, 0, 1, 0]
[0, 0, 0, 0, 1, 0, 0, 0]
******************************
there are 92 solutions
分享到:
相关推荐
本文详细介绍了如何使用Python实现八皇后问题的递归解决方案。通过递归算法,我们可以高效地遍历所有可能的放置方案,并找到所有有效的解决方案。此外,还提供了具体的代码实现细节和解释,帮助读者更好地理解和实现...
用python实现的八皇后问题求解。刚刚学习python时,用来练手写的代码。分享下~
通过上述方法,我们可以利用C++实现这些算法来解决八皇后问题,并比较它们在解决复杂度、收敛速度和解质量方面的性能。同时,这样的实践有助于深入理解这些优化算法的工作原理及其在实际问题中的应用。
使用python解决了八皇后的问题,可以实现
对于初学者而言,它提供了关于如何理解并解决八皇后问题的理论基础,同时也展示了实际编程实现的过程。 3. **first_homework.py**:这是项目的源代码文件,实现了N皇后的逻辑和Pygame的界面交互。代码首先会定义一...
**八数码问题(8皇后问题)** 八数码问题,又称为8皇后问题,是一个经典的回溯法和搜索算法的应用实例。在这个问题中,目标是在一个8×8的棋盘上放置八个皇后,使得任何两个皇后都无法在同一行、同一列或同一对角线...
汉诺塔和八皇后问题都是经典的计算机科学问题,它们在编程教育中经常被用来教授递归和回溯等算法。让我们分别深入探讨这两个问题及其Python实现。 首先,汉诺塔问题是一个基于递归的逻辑谜题,由三个柱子和一堆盘子...
本程序完全用VC++API编写的可视化实现八皇后问题的求解。模拟八皇后摆局,功能齐全,操作方便。需要源码可以联系我,具体方式见应用程序。
八皇后问题:八皇后问题,是一个...最近在学习回溯递归的算法,所以试着用Python实现八皇后的求解问题,刚开始总是走不通,后来发现是走到死节点后,回溯需要将前一步的操作还原,这是我学习过程中一直不太好理解的一
下面我将详细介绍使用Python语言结合递归算法解决八皇后问题的具体方法,并说明实现过程中的关键点。 一、问题原理及解决思路 八皇后问题的核心是冲突检测,即任意两个皇后不能处于互相攻击的位置。为了解决冲突,...
实现八皇后问题的源代码通常包括以下关键部分: 1. 初始化:创建一个二维数组表示棋盘,初始化所有位置为可放置皇后。 2. 回溯函数:这是核心算法,从第一行开始逐行放置皇后,检查当前位置是否可行,如果不可行则...
总的来说,解决八皇后问题的Python程序利用了递归和回溯策略,通过不断尝试和回退来找出所有可能的合法布局。递归函数`arrange_queen`在每一步都检查当前位置的合法性,并通过`yield`将找到的解决方案返回给调用者。...
本文实例讲述了python基于右递归解决八皇后问题的方法。分享给大家供大家参考。具体分析如下: 凡是线性回溯都可以归结为右递归的形式,也即是二叉树,因此对于只要求一个解的问题,采用右递归实现的程序要比回溯法...
6. **回溯法**:用于解决组合优化问题,如八皇后问题、N-皇后问题、数独求解等,Python的递归功能在此类问题中表现出色。 7. **贪心算法**:在每一步选择局部最优解,如霍夫曼编码、活动安排问题等。Python的迭代器...
使用python实现遗传算法,求解8皇后问题,流程如下 1、随机初始化100个个体 2、随机选择5个个体,挑选2个作为parents 3、parents结合生成children 4、children以0.8的概率变异,变异方法是随机交换2个染色体位置 5、...
# Python实现《剑指offer》 部分代码自己添加了一些测试用例, 或者自己添加了一些功能 1. 初级程序员注重算法和数据结构 2. 事先做好准备,对工作有热情 3. 面试过程放松。不要急于写代码,了解清楚所要解决的问题,...
总的来说,Python的生成器迭代机制为解决八皇后问题提供了一种高效且内存友好的方法。通过递归地生成所有可能的皇后放置,我们可以轻松地找到所有不冲突的布局,而无需一次性存储所有解。这种编程技巧在处理大规模...
包括爬山法、束搜索等底层实现 │ │ ├── 03 screen_design.py // 八皇后问题GUI设计,包含页面布设、按键响应等 │ │ ├──03 README.md //即本文档,包含环境配置、操作手册等 │ │ ├──04 优化搜索实验...
本文为大家分享了python八皇后问题的解决方法,供大家参考,具体内容如下 题目: 给定一个 N*N 正方形棋盘,在上面放置 N个棋子,又叫皇后,使每两个棋子都不在同一条横线上、竖线上、斜线上。一般我们都讨论8皇后...