擅长:python、mysql、java
<p>我有一个答案用sympy。想法是一样的:求解线性方程组,从矩阵元素的和中得到行数和列数。这是硬编码的,基本上就是你的矩阵。linsolve给你无穷多的解,其余的则把它们限制为正整数。在</p>
<pre><code>from sympy import *
from sympy.solvers.solveset import linsolve
from sympy.sets.fancysets import Naturals0
from sympy.solvers.inequalities import reduce_inequalities
M = Matrix([[1,1,0,0],[0,0,1,1],[1,0,1,0],[0,1,0,1]])
s = Matrix([5,5,6,4])
a,b,c,d = symbols('a, b, c, d')
solution = linsolve((M,s), [a,b,c,d])
solution_eq = [x >= 0 for x in list(list(solution)[0])]
possible_values = reduce_inequalities(solution_eq, x.free_symbols)
for d_fixed in Intersection(possible_values.as_set(), Naturals0()):
print solution.subs({d : d_fixed})
</code></pre>