我想用n个元素填充nxn矩阵,这样每行和每列只有1个元素.例如,3x3矩阵可以具有以下可能的解决方案:
1 0 0 0 1 0 0 0 1
0 1 0 1 0 0 1 0 0
0 0 1 0 0 1 0 1 0
Run Code Online (Sandbox Code Playgroud)
以下是我写的代码:
arr=[[0 for x in xrange(n)] for x in xrange(n)]
i=0
while i<n:
j=0
while j<n:
arr[i][j]=0
j+=1
i+=1
i=0
while i<n:
j=0
while j<n:
x=0
while x<n:
if((arr[i][x-1]==1) or (arr[x-1][j]==1)):
break
x+=1
if(x==n-1 and arr[i][n-1]==0 and arr[n-1][j]==0):
arr[i][j]=1
j+=1
i+=1
Run Code Online (Sandbox Code Playgroud)
但所有的元素都是标准的0.有人可以指出我的错误.
n*n具有n个元素的矩阵,使得每行和每列恰好具有1个元素.
我假设你想要一个*n矩阵,每个行/列上只有一个非0元素
>>> n = 5
>>> [[1 if j == i else 0 for j in range(n)] for i in range(n)]
[[1, 0, 0, 0, 0], [0, 1, 0, 0, 0], [0, 0, 1, 0, 0], [0, 0, 0, 1, 0], [0, 0, 0, 0, 1]]
Run Code Online (Sandbox Code Playgroud)
如果您需要所有可能的排列,您可以写:
>>> n = 5
>>> m = [[1 if j == i else 0 for j in range(n)] for i in range(n)]
>>> from itertools import permutations
>>> for p in permutations(m):
>>> print p
Run Code Online (Sandbox Code Playgroud)