& U/ q3 h+ L+ M9 }* D- c%function [ret_m]=k_shell(mixedsig)8 P' H/ o: B6 r" C
%邻接矩阵8 S2 |) D. ^" K0 N. g; j, Z- g
% A=load('cdbBA_4000_5_0_.txt'); %里边的数据结构好像是每2个一组,例如 3 4 表示一组,表示点3和节点4有连接。2 y N" `& p& w- x3 w1 [! s
% & u8 \; b+ n, A$ d5 K% ) P4 {6 r* q: c1 ^. j, F6 {( ^( F. r5 s
% TT=A(:, 1:2)+1;4 M$ a, l8 A1 s/ [
% maxtt=max(max(TT));6 P1 x0 C) t. S& ]. r
% mixedsig=zeros(max(max(TT))); ! }, f. j6 F0 b W% len=length(TT);& S$ f/ P' r4 y; ], G& Z% e2 c' B$ P
% for i=1:len+ d% T1 A9 P! \8 \
% mixedsig(TT(i,1),TT(i,2))=1;- r+ n0 u! b, b( r4 ~$ ?& w& Q
% mixedsig(TT(i,2),TT(i,1))=1;8 ]3 e7 \$ i6 M7 F0 i8 f
% end 9 Q) H# W/ J6 m3 y3 @6 i% disp('已转化为邻接矩阵!') 1 ]) n5 T1 D( [. L9 m & |( H5 ]$ B$ D3 g[XY]=distri(mixedsig);8 ~ P( g6 Q/ m
mixedsig=[0,1,1,1;1,0,0,1;1,0,0,1;1,1,1,0]% i7 K% f" h' A, @, z+ z
function [ret_m]=kshell(mixedsig)$ ]2 l* U% I- r( f
mixedsig=[0,1,0,1;1,0,0,1;0,0,0,1;1,1,1,0]; - m6 J0 {3 Z- Q' F' R: ~mixedsig=[0,1,0,1,0;1,0,0,1,0;0,0,0,1,1;1,1,1,0,0;0,0,1,0,0];8 a, b* y' ?$ B' a1 M
5 P: a1 {3 x0 g5 l% F7 f& Czzz=0; / Y2 ?3 [, j5 Q. J, jj=1; %第j层 5 \: u$ K) `+ z9 W6 |t=1; % $ F: l: c4 U2 |8 {9 B: A& Ptad=mixedsig; %邻接矩阵- O- A9 E" V8 ^ ], p0 G8 \
k=0;- A% i7 ~5 d9 B- T
ii=1; 6 V% y4 r! L9 P- j$ |ret_m=[]; %返回值; i,j : 第i层:所有节点5 ^( y8 \' h$ ^ Y; B: v
len=length(mixedsig); %矩阵长度 * }! }. J7 z/ `tt=1;3 E3 ?7 r! s( ]: ~
n=1; " |2 l/ e; z7 O& z: ]nn=1; y, G% y+ L- ~( P) lm_t=[]; " [5 z; E B' H. r; Im_tt=[]; ) m3 l* e- J/ b7 g- E: \1 rm_ttt=[];7 h6 U! C$ ?$ V9 c1 N
p=1;8 z# t: p1 }% z8 R( F5 f
while (tt==1) %控制最高层结束8 {0 y0 Q9 U+ p: Y u: ^
sss=sum(sum(tad))/(maxtt*maxtt); |: H' w) u1 ]: m: f5 t
if sum(sum(tad))==0 %所有元素为0,则退出 6 I; A" P+ T& ?9 t/ d. D6 C break; ( }2 x9 T) `9 d' r( @+ n3 w- Z end4 N9 S7 z9 E% K0 f$ K! x! B
t=1; %控制第j层 计算3 D4 h ~0 k- `+ g
while(t==1) % 每循环一次,tad改变,去掉度数小于j的节点;直到没有度数小于j的节点 : J& B& Y, f8 O, G" u! m5 _ t=0;$ t& N( O3 S- E B# g; \5 t4 u
ii=1; %第j层第ii个节点 . k% q% q# e/ ^# L M for i=1:len %从矩阵1至len行, 去掉小于j的节点 ! R6 Z' l- T2 H9 c0 |& z lll=i/len 9 Z9 @2 T4 R' [+ o k=sum(tad(i, : )); %计算i行度数 8 z$ Q2 D, G7 Y/ D if k==0 %度数为0,下一个i值$ ~* V( `, Z( T
% t=1 ; % / H- b" ~4 P7 ^# R( ^/ T/ l$ I% A6 t; S3 M. ?, m
continue;' j# D+ ]; F$ e- Z- [9 Y- @9 P
elseif k<=j %度数小于j层 7 ]3 [! m1 l) E5 a% s; [ t=1; %控制下一次还要循环 3 C" V8 m. Q* b3 t- l1 L, a6 W tad(i, : )=0; %i节点加到j层,将度数至为0,所有i行值至为0 5 v5 e. p, t" C0 Z+ h tad(:,i)=0; %相应i列至为0& W9 G T4 `+ x
' X7 ~) W7 p4 J0 H ret_m(j,ii)=i; %将i节点加到j层) e' B) ~* W' g9 C! o# c) @; }1 j
& ^3 [5 h# }8 ~% B4 v m_ttt=union(ret_m(j,ii),m_ttt); # N4 C$ o( Y! Y for n=1:len %判断其他行有无因为 将tad(:,i)元素设为0 而所有行变05 u5 v9 B4 O- @$ A0 z: Z
if sum(tad(n, : ))==0 " u# _+ }2 U9 m( [( l! R3 p% l2 @0 t- Z
8 u& T, p' L7 k5 ^, N: C* K7 l& D
ii=ii+1;. z$ i9 f; p* ^" L# @5 C2 [
ret_m(j,ii)=n; ) N. d6 T2 ]+ \ m_t=n;! C' z& s$ X/ s1 c3 \+ ^* N" B
m_tt = intersect(m_ttt,m_t); , Y& w$ r; z$ Y/ y4 n r: H8 w if length(m_tt)==0 %length(m_t)~=0 && 9 M( q1 L4 |8 g v$ H( J+ c/ F6 ~1 v3 t7 @! C. [8 v d# @- m
/ d7 ~" I3 D5 [2 Q* P m_ttt=union(ret_m(j,ii),m_ttt); 9 x" g$ u! a+ S1 y, ~ m_t=[]; 2 @$ O) ]3 m7 g2 s, G1 O* p end 9 I7 ~5 w; ?& J' Q! x; U end & d( c: ?; \: y 9 [4 K& D) k6 \4 r7 o9 { b. s: H2 ^. U! z8 T f1 v& D: f
! G4 M# \" h8 U% N2 G' N end %for n=1:len 0 L5 ?$ t) L! U end % if k==05 ]- w0 n9 _& S% ~8 r
ii=ii+1; 4 \$ F3 E4 q; N' B* t8 k0 ]/ A end %end of i=1:len* K! |6 q$ a7 s. Y1 R7 s2 n
4 F8 I+ m! l3 z; s' O2 }7 A end % end of while(t==1) : s- b: ?! i/ G% |0 N6 P j=j+1; & H6 g+ W0 n* p2 O* x9 p ii=1; 4 L' b. H0 Z0 vend % end of while(tt==1). s" s; D" r" e1 Y: [# e
disp(ret_m); / t0 P e D5 l9 _, m% U/ ? % p! M, _6 D9 I; p& m; F' _5 ~; H2 ~) r' o+ P* X$ @* e/ N4 Q
! v- J( r# W% `5 e: H- a4 g" ~3 ~$ K5 ]2 o. r4 f6 J: f