# python案例:八皇后问题

O * * * * * * *
* O * * * * * *
* * O * * * * *
* * * O * * * *
* * * * O * * *
* * * * * O * *
* * * * * * O *
* * * * * * * O


def print_queens(result):
print('='*10)
for i in result:
print("* "*i,end="")
if(i>=0):
print("O ",end="")
print("* "*(len(result) - i - 1))


1. 该棋子正上方已经有棋子存在;
2. 该棋子左上对角线已经有棋子存在;
3. 该棋子右上对角线已经有棋子存在;
O * * * * * * *
* * O * * * * *
* * * C * * * *
* * * * * * * *
* * * * * * * *
* * * * * * * *
* * * * * * * *
* * * * * * * *


1. 该棋子正上方已经有棋子存在;
该值在列表中已存在,例如[0,2,2,-1,-1,-1,-1,-1]
2. 该棋子左上对角线已经有棋子存在;
索引先前推 n 位, 有 value - n = cur_index - n,例如[0,2,3,-1,-1,-1,-1,-1]
3. 该棋子右上对角线已经有棋子存在;
索引先前推 n 位, 有 value - n = cur_index + n,例如[0,2,1,-1,-1,-1,-1,-1]
'''

'''
res = []

def check(row, column):
# 逐行向上考察
for (index, value) in enumerate(result[:row][::-1]):
# 这三种分别表示在正上方,右上对角线,左上对角线存在棋子
if value in [column, column + index + 1, column - index - 1]:
return False
result[row] = column
return True


def enum_queens_iter():
length = len(result)
for r0 in range(length):
if check(0,r0):
result[0] = r0
for r1 in range(length):
if check(1,r1):
result[1] = r1
for r2 in range(length):
if check(2,r2):
result[2] = r2
for r3 in range(length):
if check(3,r3):
result[3] = r3
for r4 in range(length):
if check(4,r4):
result[4] = r4
for r5 in range(length):
if check(5,r5):
result[5] = r5
for r6 in range(length):
if check(6,r6):
result[6] = r6
for r7 in range(length):
if check(7,r7):
result[7] = r7
print_queens(result)


'''

'''
result = [-1] * 8
def enum_queens(row_index):
length = len(result)

# 考察当前部分的第一行
for i in range(length):
if(check(row_index,i)):
if row_index == length - 1:
global total_num
total_num+=1
print_queens(result)
# 考察剩余的部分
enum_queens(row_index+1)

if __name__ == "__main__":
enum_queens(0)

09-13

09-13 4323
10-30 308
05-31
09-04
03-26 103
02-20 1098