我需要知道是否有更好的(优化)方法来解决八皇后问题。另外,如何在代码中插入皇后棋子的unicode符号?
我使用Python 3.7并使用了生成器和函数来解决此问题,但是以某种方式我认为它不是非常有效。
import random
def conflict(state, nextX):
nextY = len(state)
for i in range(nextY):
if abs(state[i] - nextX) in (0, nextY - i):
return True
return False
def queens(num = 8, state = ()):
for pos in range(num):
if not conflict(state, pos):
if len(state) == num-1:
yield (pos,) #for tuple
else:
for result in queens(num, state + (pos, )):
yield(pos, ) + result
def readableresult(solution):
def line(pos, length = len(solution)):
return ' .' * (pos) + ' X ' + '. ' * (length-pos-1)
for pos in solution:
print(line(pos))
readableresult(random.choice(list(queens(8))))
结果正确。它给出了皇后棋子的准确位置。结果没有问题。我想放置女王符号而不是X。...我该怎么做?
答案 0 :(得分:1)
更改此内容
return ' .' * (pos) + ' X ' + '. ' * (length-pos-1)
到
return ' .' * (pos) + ' \u2655 ' + '. ' * (length-pos-1)
。