八皇后问题,替代解决方案

时间:2019-07-29 18:16:26

标签: python

我需要知道是否有更好的(优化)方法来解决八皇后问题。另外,如何在代码中插入皇后棋子的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。...我该怎么做?

1 个答案:

答案 0 :(得分:1)

更改此内容
return ' .' * (pos) + ' X ' + '. ' * (length-pos-1)

return ' .' * (pos) + ' \u2655 ' + '. ' * (length-pos-1)

参考:https://en.wikipedia.org/wiki/Chess_symbols_in_Unicode