FormationControlSimulation/SOURCE/networks-toolbox/kregular.m

57 lines
1.2 KiB
Matlab
Raw Normal View History

2019-06-17 14:31:50 +07:00
% Create a k-regular graph.
% Note: No solution if k and n are both odd.
%
% INPUTs: n - # nodes, k - degree of each vertex
% OUTPUTs: el - edge list of the k-regular undirected graph
%
% Other routines used: symmetrizeEdgeL.m
% GB: last updated, Oct 28 2012
function el = kregular(n,k)
el=[];
if k>n-1; fprintf('a simple graph with n nodes and k>n-1 does not exist\n'); return; end
if mod(k,2)==1 && mod(n,2)==1; fprintf('no solution for *n* and *k* both odd\n'); return; end
half_degree=floor(k/2); % k/2 if k even, else (k-1)/2
for node=1:n
for kk=1:half_degree
node_f=mod(node+kk,n);
if node_f==0; node_f=n; end
if not(ismember([node,node_f,1],el,'rows'))
el = [el; node node_f 1];
end
node_b=mod(node-kk,n);
if node_b==0; node_b=n; end
if not(ismember([node,node_b,1],el,'rows'))
el = [el; node node_b 1];
end
end
end
if mod(k,2)==1 && mod(n,2)==0
% connect mirror nodes
for node=1:n/2
node_m=mod(node+n/2,n);
if node_m==0; node_m=n; end
if not(ismember([node,node_m,1],el,'rows'))
el = [el; node node_m 1];
end
end
end
el=symmetrizeEdgeL(el);