0001 function random_regular(g,n,k)
0002
0003
0004
0005
0006
0007
0008
0009
0010 if mod(n*k,2)==1
0011 error('We number have n*k even or no regular graph is possible');
0012 end
0013
0014 if (k>n-1)
0015 error('Degree too large');
0016 end
0017
0018 if (k<0)
0019 error('Degree must be nonnegative')
0020 end
0021
0022 h = graph(n);
0023
0024 while(true)
0025 clear_edges(h);
0026 p = randperm(n*k);
0027 elist = reshape(p,n*k/2,2);
0028 elist = mod(elist,n)+1;
0029 if any(elist(:,1)==elist(:,2))
0030 continue
0031 end
0032 add(h,elist);
0033 if ne(h)== n*k/2
0034 break
0035 end
0036 end
0037
0038 copy(g,h);
0039 rmxy(g);
0040 clear_labels(g);
0041
0042 free(h);