我正在尝试创建一个棋盘来解决8皇后问题。挑战是让用户输入皇后的位置,并告诉他们该位置是否由于其他皇后而不被允许。到目前为止我只有一块棋盘
这是我到目前为止所拥有的代码:
boardsize = input('Board size: ')
rows = [[0] * int(boardsize)]
rows = str(rows).replace('[','').replace(']','').replace(',','')
for i in range(int(boardsize)):
print(i + 1, rows)这会产生以下结果:
电路板尺寸:8
1 0 0 0
2 0 0 0
3 0 0 0
4 0 0 0
5 0 0 0
6 0 0 0
7 0 0 0
8 0 0 0
我找不到一种方法来输入我想要输入的"Q“(象征女王)。然后,我将用Q而不是0重新打印棋盘,并重复此操作,直到放置了8个皇后或没有空间容纳另一个皇后。它必须由用户控制。
发布于 2017-09-10 19:30:38
我建议不要存储整个网格,只需在每行中存储皇后位置即可。这是因为每行中只能存在一个皇后,所以您知道这将足以存储任何皇后。它实际上也让你的生活变得更容易,因为你有直接的指向queens的指针(而不是不得不遍历棋盘来找到queens)。你可以用它来做类似这样的事情:
sample_positions = [0, 2, 4, 1, 3, 5, None, None]
def print_positions(positions):
for ind, pos in enumerate(positions):
row = ["_"] * len(positions)
if pos is not None:
row[pos] = "Q"
print("{}: {}".format(ind, " ".join(row)))
x, y = map(int, input("Enter new queen position> ").split())
sample_positions[y] = x
print_positions(sample_positions)这个程序是这样运行的:
Enter new queen position> 6 7
0: Q _ _ _ _ _ _ _
1: _ _ Q _ _ _ _ _
2: _ _ _ _ Q _ _ _
3: _ Q _ _ _ _ _ _
4: _ _ _ Q _ _ _ _
5: _ _ _ _ _ Q _ _
6: _ _ _ _ _ _ _ _
7: _ _ _ _ _ _ Q _我已经包含了一个如何获取输入的示例(尽管您可能希望编写一个验证函数并首先应用该函数。我还用一些更有Pythonic风格的东西替换了您的打印功能--一般来说,对列表的repr执行字符串操作不是一个好主意。此外,在本例中,输入假设x和y都是整数-您可以根据需要将其更改为字母或任何其他值。为了简单起见,我将整个代码移到了更多的0基础上--我建议使用类似于空单元格的下划线,而不是整数。
想必你对性能不是很感兴趣。这个程序确实为它通过的每一行建立了一个空行-通过一些时髦的生成器链接,你可能会让它快几纳秒,但这会使这个答案比现在更复杂。
这是我的queens project的修改过的摘录。(免责声明:我写的)。如果您希望参考它以了解有关表示如何工作的更多信息,或者您可以如何验证此模型中的板,请随意。请注意,我的项目不同于你的项目-我的项目-强制所有可能的解决方案,并且没有交互式输入。
发布于 2017-09-10 19:17:02
将rows保留为列表,只需更改适当的元素即可。不需要对字符串进行任何转换;只需根据需要对各个元素执行print。
另外,使rows实际上包含多行(目前您只在字符串转换之前设置了一行)。
https://stackoverflow.com/questions/46140074
复制相似问题