python实现⼋皇后问题(⼆位列表)
⼋皇后问题:
在8*8的国际象棋盘上,放置8个皇后,使任何⼀个皇后都不能吃掉另⼀个。国际象棋规则中,皇后可以吃到任何⼀个与他在同⼀⾏、同⼀列或者同⼀斜线上的敌⽅棋⼦,所以⼋皇后问题的所有解满⾜:
8个皇后都不在同⼀⾏、同⼀列,或者同⼀斜线上。
要求:输出所有的解。提⽰,⽤递归
这是简单的dfs搜索,python如下
def print1():
global t,arr
print('No.',t)
for i in range(1,9):
for j in range(1,9):
print(arr[i][j],end=' ')
print()
t+=1
def judge(num):
for i in range(1,num):
if (hang[num]==hang[i]) or (abs(hang[i]-hang[num])==num-i):
return False
return True
def dfs(num):
global hang,arr,t
if num==9:
单身网名大全
print1()
else:
for i in range(1,9):
hang[num]=i
if judge(num):
arr[num][i]=1
48式太极拳分解教学dfs(num+1)
arr[num][i]=0
global t,arr,hang
t=1
hang=[0]*11
arr=[[0 for col in range(10)]for row in range(10)]
dfs(1)
def panduan(n):
十堰中考成绩查询'''
判断当前点是否满⾜⾏列斜线上没有其他棋⼦的情况
'''
global mapp,hang
不就是一个人守着黑夜过for i in range(0,n):
if (hang[i] == hang[n]) or (abs(hang[i] - hang[n]) == (n - i)):
return 0
return 1
def dfs(n):
'''
矩阵深度遍历所有情况,n为当前的⾏数
先从第⼀⾏,第⼆⾏,第三⾏,以此类推
'''
global sum1,mapp,hang
if n == 8:#当遍历到n等于8时(第九⾏),遍历结束
伊能静不雅光碟照片sum1+=1
print('No .',sum1)
for i in mapp:
for j in i:
print(j,end=' ')
print()
return
for i in range(8):#遍历回溯
hang[n]=i #另第n⾏的第i个位置为棋
if panduan(n):#调⽤判断函数,判断第n⾏第i个元素可不可以是棋⼦ mapp[n][i]='棋'
dfs(n+1)
mapp[n][i]='0'
最后的晚餐赏析if __name__ == '__main__':#主函数
mapp = [['0' for row in range(8)]for col in range(8)] # 棋盘
hang= [0]*8 #判断⾏列斜线冲突问题
sum1=0 #判断总次数
dfs(0)
print('共{}种⽅案'.format(sum1))
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论