Given two numbers n and s, build an n-by-n logical matrix (of only zeros and ones), such that both the row sums and the column sums are all equal to s. Additionally, the main diagonal must be all zeros.
You can assume that: 0 < s < n
Example:
Take n=10 and s=3, here is a possible solution
M =
0 1 0 0 1 1 0 0 0 0
0 0 1 0 1 1 0 0 0 0
0 0 0 0 1 1 0 0 1 0
0 0 0 0 0 0 1 1 0 1
1 0 0 0 0 0 1 0 1 0
0 1 1 0 0 0 0 1 0 0
1 0 0 1 0 0 0 0 0 1
0 0 0 1 0 0 0 0 1 1
1 1 0 0 0 0 0 1 0 0
0 0 1 1 0 0 1 0 0 0
Note that the following conditions are all true:
all(sum(M,1)==3) % column sums equal to s all(sum(M,2)==3) % row sums equal to s all(diag(M)==0) % zeros on the diagonal islogical(M) % logical matrix ndims(M)==2 % 2D matrix all(size(M)==n) % square matrix
Unscored bonus:
Visualize the result as a graph where M represents the adjacency matrix:
% circular layout t = linspace(0, 2*pi, n+1)'; xy = [cos(t(1:end-1)) sin(t(1:end-1))]; subplot(121), spy(M) subplot(122), gplot(M, xy, '*-'), axis image
Solution Stats
Problem Comments
Solution Comments
Show commentsProblem Recent Solvers340
Suggested Problems
-
Find the numeric mean of the prime numbers in a matrix.
9135 Solvers
-
Find the longest sequence of 1's in a binary sequence.
6687 Solvers
-
Sum all integers from 1 to 2^n
17425 Solvers
-
Back to basics 9 - Indexed References
461 Solvers
-
Flag largest magnitude swings as they occur
690 Solvers
Problem Tags
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!
Any clue? Does this problem require great mathematics abilities ?
Not really, imagine in the simplest case that we could use the diagonals (ignoring this constraint), what the solution would look like? A chessboard pattern would solve it, wouldn't it? Now, how can we work around the constraint?
Hint? I don't have the slightest clue where to start. Rafael, your tip leaves me no less baffled.