Matlab生成只含0,1值的方阵,要求限制1的数量,对角线全为0. 位置相对不同时为1,即Xij与Xji不同时为1,

如题所述

function t = getmy01mat(M,n)  % ä¿å­˜ä¸º getmy01mat.m
t = [];
if n>M*(M-1)/2
    disp(['M,n的限制条件:' 'n<=M*(M-1)/2']);
    return
end
a = [ones(n,1); zeros(M^2-n,1)];
id = randperm(length(a));
b = a(id);
id = find(b==1);
% d = randi(2,n,1)-1;
d = randint(n,1,[0 1]);  % Matlab7.1
al = gettri(M,d,id);
bu = gettri(M,~d,id);
t = al+bu';

function tri = gettri(M,d,id)
tri = ones(M,M);
al = tril(tri,-1);
a = d.*id;
a = [a; zeros((M^2-M)/2-length(a),1)];
a(a>0) = 1;
dd = find(al==1);
a = a.*dd;
a(a==0) = [];
al = zeros(M^2,1);
al(a) = 1;
tri = reshape(al,M,M);

%%% 应用

M = 5; n = 7;
getmy01mat(M,n)

ans =

     0     1     1     0     1

     0     0     1     1     0

     0     0     0     0     0

     1     0     0     0     0

     0     1     0     0     0

getmy01mat(M,n)

ans =

     0     0     0     0     1

     1     0     0     0     0

     1     1     0     0     0

     1     1     0     0     0

     0     1     0     0     0

M = 5; n = 11;
getmy01mat(M,n)

M,n的限制条件:n<=M*(M-1)/2

ans =

     []

温馨提示:答案为网友推荐,仅供参考
相似回答