选择行和列唯一的列表元素列表(N Queens)
Choose list of lists element unique to row and column (N Queens)
我有一个 -
个字符列表的列表,它充当网格。
我想将每个列和行的 -
更改为 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
这是我的输出。如您所见,网格上的 Q
太多:
[['-','-','-','-','-','-','Q','-'],
['-','-','-','-','Q','Q','-','-']
['-','-','-','-','Q','-','-','-']
['Q','Q','-','-','-','Q','Q','-']
['-','-','Q','-','Q','-','-','-'].
几件事:
- 你的循环太多了。您可以遍历第一个索引
i
,然后只需在 randrange
告诉您的位置插入 Q
。
- 你的
randrange
调用是错误的。它应该有开始和结束。事实上,如果您希望 Q
在行 和 列中是唯一的,那么 rangerange
不是合适的工具。
- 您的网格设置实际上并没有产生您显示的结果。
以下三项都已修复:
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
。
这是我目前得到的:
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
这是我的输出。如您所见,网格上的 Q
太多:
[['-','-','-','-','-','-','Q','-'],
['-','-','-','-','Q','Q','-','-']
['-','-','-','-','Q','-','-','-']
['Q','Q','-','-','-','Q','Q','-']
['-','-','Q','-','Q','-','-','-'].
几件事:
- 你的循环太多了。您可以遍历第一个索引
i
,然后只需在randrange
告诉您的位置插入Q
。 - 你的
randrange
调用是错误的。它应该有开始和结束。事实上,如果您希望Q
在行 和 列中是唯一的,那么rangerange
不是合适的工具。 - 您的网格设置实际上并没有产生您显示的结果。
以下三项都已修复:
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 中打乱范围不起作用)