首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在python中为8皇后创建冲浪板

在python中为8皇后创建冲浪板
EN

Stack Overflow用户
提问于 2017-09-10 19:10:54
回答 2查看 233关注 0票数 0

我正在尝试创建一个棋盘来解决8皇后问题。挑战是让用户输入皇后的位置,并告诉他们该位置是否由于其他皇后而不被允许。到目前为止我只有一块棋盘

这是我到目前为止所拥有的代码:

代码语言:javascript
复制
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个皇后或没有空间容纳另一个皇后。它必须由用户控制。

EN

回答 2

Stack Overflow用户

发布于 2017-09-10 19:30:38

我建议不要存储整个网格,只需在每行中存储皇后位置即可。这是因为每行中只能存在一个皇后,所以您知道这将足以存储任何皇后。它实际上也让你的生活变得更容易,因为你有直接的指向queens的指针(而不是不得不遍历棋盘来找到queens)。你可以用它来做类似这样的事情:

代码语言:javascript
复制
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)

这个程序是这样运行的:

代码语言:javascript
复制
Enter new queen position> 6 7
0: Q _ _ _ _ _ _ _
1: _ _ Q _ _ _ _ _
2: _ _ _ _ Q _ _ _
3: _ Q _ _ _ _ _ _
4: _ _ _ Q _ _ _ _
5: _ _ _ _ _ Q _ _
6: _ _ _ _ _ _ _ _
7: _ _ _ _ _ _ Q _

我已经包含了一个如何获取输入的示例(尽管您可能希望编写一个验证函数并首先应用该函数。我还用一些更有Pythonic风格的东西替换了您的打印功能--一般来说,对列表的repr执行字符串操作不是一个好主意。此外,在本例中,输入假设xy都是整数-您可以根据需要将其更改为字母或任何其他值。为了简单起见,我将整个代码移到了更多的0基础上--我建议使用类似于空单元格的下划线,而不是整数。

想必你对性能不是很感兴趣。这个程序确实为它通过的每一行建立了一个空行-通过一些时髦的生成器链接,你可能会让它快几纳秒,但这会使这个答案比现在更复杂。

这是我的queens project的修改过的摘录。(免责声明:我写的)。如果您希望参考它以了解有关表示如何工作的更多信息,或者您可以如何验证此模型中的板,请随意。请注意,我的项目不同于你的项目-我的项目-强制所有可能的解决方案,并且没有交互式输入。

票数 1
EN

Stack Overflow用户

发布于 2017-09-10 19:17:02

rows保留为列表,只需更改适当的元素即可。不需要对字符串进行任何转换;只需根据需要对各个元素执行print

另外,使rows实际上包含多行(目前您只在字符串转换之前设置了一行)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46140074

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档