八皇后python

八皇后问题是经典的回溯问题,可以通过八皇后的学习来体会回溯法的使用,通过对回溯法算法框架的学习,python代码如下:

number = 0
queen = [[ '. ' for i in range(8)]for j in range(8)]
def backtrack(queen,row):
	if row == len(queen):
		print_queen(queen)
		return #返回上一级,即函数执行完毕,释放栈
	for col in range(len(queen[0])): #选择列表 (列)
		if not isValid(queen,row,col):
			continue
		queen[row][col] = 'Q ' #做出选择
		backtrack(queen,row+1)  #继续递归
		queen[row][col] = '. ' #撤销选择
def isValid(queen,row,col): #判断函数
	for i in range(len(queen)):
		if queen[i][col] =='Q ':
			return False
	i = row -1
	j = col + 1
	while i>= 0 and j<len(queen):
		if queen[i][j] == 'Q ':
			return False
		j += 1
		i -= 1
	i = row -1 
	j = col -1
	while i>=0 and j>=0:
		if queen[i][j] == 'Q ':
			return False
		j -= 1
		i -= 1
	return True
def print_queen(queen):
	global number        #全局变量的使用
	for i in range(len(queen)):
		for j in range(len(queen[0])):
			print(queen[i][j],end='')
		print('')
	print('')
	number += 1
backtrack(queen,0)
print(number)

可以运行输出八皇后的92种答案,最后number得出答案的总数。

你可能感兴趣的:(oj)