【问题标题】:Choose list of lists element unique to row and column (N Queens)选择行和列唯一的列表元素列表(N 个皇后区)
【发布时间】:2015-06-22 04:12:45
【问题描述】:

我有一个- 字符列表列表,用作网格。

我想将每列和每行的一个 - 更改为一个 Q

这是我目前所得到的:

   import pprint 
   import random # I import these classes
   grid = [['-'] for n in range(8)]
   for i in range (8):
       for j in range(8):
           inserPoint = random.randrange(8,8)
           if (j == inserPoint or i == inserPoint) and (grid[j] != 'Q' or grid[i] != 'Q'):
               grid[i][j] = ('Q')
   pprint.pprint(grid) #/ how to print one queen per line 

这是我的输出。如您所见,网格上的Qs 太多了:

[['-','-','-','-','-','-','Q','-'],
 ['-','-','-','-','Q','Q','-','-']
 ['-','-','-','-','Q','-','-','-']
 ['Q','Q','-','-','-','Q','Q','-']
 ['-','-','Q','-','Q','-','-','-'].

【问题讨论】:

  • 第一步是修复缩进。
  • 第二步应该是修复 if 语句中的语法错误
  • 第 3 步:修复 IndexError: list assignment index out of range(您的网格是 1x8,而不是 8x8)
  • 这是什么import random/ i import this classes

标签: python n-queens


【解决方案1】:

一些事情:

  1. 您的循环次数过多。您可以遍历第一个索引i,然后只需在randrange 告诉您的位置插入Q
  2. 您的randrange 呼叫错误。它应该有一个开始和一个停止。事实上,如果您希望您的 Qs 在行列中是唯一的,那么rangerange 不是正确的工具。
  3. 您的网格设置实际上并没有产生您所展示的效果。

这三样东西都修好了:

In [34]: size = 8
In [35]: grid = [['-' for m in range(size)] for n in range(size)]
In [36]: insertPoints = range(size) # = list(range(size)) in Python 3
In [37]: random.shuffle(insertPoints)
In [38]: for i in range(size):
   ....:     grid[i][insertPoints[i]] = "Q"

这给出了:

In [39]: grid
Out[39]: 
[['-', '-', '-', 'Q', '-', '-', '-', '-'],
 ['-', 'Q', '-', '-', '-', '-', '-', '-'],
 ['-', '-', '-', '-', '-', '-', 'Q', '-'],
 ['-', '-', '-', '-', '-', 'Q', '-', '-'],
 ['Q', '-', '-', '-', '-', '-', '-', '-'],
 ['-', '-', '-', '-', 'Q', '-', '-', '-'],
 ['-', '-', '-', '-', '-', '-', '-', 'Q'],
 ['-', '-', 'Q', '-', '-', '-', '-', '-']]

(请参阅this,了解为什么在 Python 3 中无法改组范围)

【讨论】:

  • 我们仍然有 Q 重叠
  • 抱歉。是的,我没有仔细阅读。我会解决的。
  • 感谢您的帮助,先生
  • 啊,我认为我们在这里遇到了 Python 2.7 与 Python 3 的问题。请参阅this 了解您的解决方案。
  • 是的。我已经解决了这个问题。使用注释中的代码到In[36] 行,shuffle 应该可以工作。 Here 是您需要的 Python 3 代码。
猜你喜欢
  • 1970-01-01
  • 2021-11-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-04-12
  • 2021-08-12
  • 2016-07-01
  • 1970-01-01
相关资源
最近更新 更多