数学建模社区-数学中国
标题:
求助关于求图割点的代码,哪里错了?怎么改正啊?
[打印本页]
作者:
ganquanlife
时间:
2013-3-3 14:54
标题:
求助关于求图割点的代码,哪里错了?怎么改正啊?
function [nc] = ncutf(g)
! w; G& x5 p+ }0 p; K
%求割点的算法 g为邻接矩阵 nc为割点的集合
" c' ]9 ]3 H' o! Q8 d: E
n=size(g,1);
# E$ v* C3 U# }% Q8 I$ }6 P7 @6 a
if n>=3
+ d' l6 G+ c% F1 b' j4 z* z
a=sum(g);
* X/ F6 m* N* k2 k
b=sum(a==2);
1 h" d0 w! G$ t, T4 I- x( L
if b==n
' O! C. H. r0 v! { f
fprintf('本图为圈,无割点。n')
9 [) m8 t! W& |; a. p
nc=0;
" B$ P1 A0 I& D# T' f& }0 m
end
9 r; U; j3 t' }
else
3 i' ~0 I! |( m
[w,k]=dfs3(g);
+ ^5 a4 E: `; r6 Q K( ]+ ?+ D
%nc=[];
3 [3 b& d. |1 V% S& c" Q* D
nc=isncf(w,k);
! s0 V* \+ z- w0 P
n=size(g,1);
1 N* w" k U, M& ]. X2 i
for i=1:n
' t" d2 b1 X( K: [# M, l* L- R
for j=1:n
) D: w" n8 l' G4 {0 {( k& A6 R
if w(i,j)>1
! b% ~/ v( [9 m% k
if k(i)>k(j)
& u$ `1 O0 B* t0 u6 g% y
g(i,j)=2;
+ o9 I. \: W) }7 k
else
& ~: R" K- @1 f
g(i,j)=3;
, ^7 ^& T6 R p$ } ?/ M- ~# F
end
7 {3 z3 r. P$ w/ d. T/ d) F$ j- M' X( J
end
v+ s( I+ r8 z: K' O3 @% }
end
* q! a `0 R( Y% N
end
+ S5 j9 ?% t" d
/ b* M( J, ^& `# p( \; g
for i=1:n
" N5 j; L4 z% X- a" n5 L
f1=find(g(i,
==2);
; z/ V- i7 R5 W9 g
f2=find(g(i,
==3);
( ~7 o0 R# X" C& S
f=union(f1,f2);
0 i; X. Y+ q" o
l(i)=min([k(f) k(i)]);
9 a. e& k% ^4 x6 e. D. y
end
# y2 Y9 `7 H( J4 y& n# E) i2 }5 B
4 L1 l( O. P' }) l- Q4 ]
for i=1:n
1 r/ Y a( V4 j( \
for j=1:n
0 G1 w, l4 e5 X% q
if g(i,j)==3 & k(i)>1&l(j)>=k(i)
- ~: `+ V# P, q( ~9 b0 v% h' }
nc=union(i,nc);
; L: [2 L: y8 S
end
/ T$ \# F* U+ k( R8 m
end
g$ k, S& M8 q$ A" @' j) R9 w
end
- d$ ]% T D* d) [& v- }( N2 Q1 t
end
' B! U* ]3 B; w3 b' t9 T" {
end
$ l- O. e# P) U* N m4 Q" U4 X: }- _" r
+ J3 K! A# Z+ b( D8 z
8 k3 q/ \+ m$ W! m) E( F. S V) }
function nc=isncf(w,k)
+ O8 v1 S" r1 K* E) L; n% D
nc=[];
- o- {3 i5 {5 Q1 X4 r
t=zeros(size(w));
- g% q( j% j- V9 Y' [" j
n=size(w,1);
2 v* U6 [+ v- @; z* p7 C" [
a=find(w~=0);
* g2 e, c* h( b( y7 }+ T8 j7 B
for i=1:length(a)
6 r) O8 `" W6 s' M. X- `0 Q+ }. l0 N% Z
d(i)=w(a(i));
4 a+ k- v, |9 R6 X
if a(i)/n>floor(a(i)/n)
1 d" F0 N$ G$ z5 G
t(i)=floor(a(i)/n)+1;
6 @! y# Z/ \+ A4 l# {
else
: x- `9 a0 F) P; h" ]
t(i)=floor(a(i)/n);
8 W8 H4 m* S9 P& h: X7 L
end
# |$ ~/ x" x }, Y y" C8 l! m
t1(i)=mod(a(i),n);
& j! W1 k5 Z7 z9 ~: M4 O' o7 I" z$ ]2 }
if t1(i)==0
2 h+ o& ^' W4 `' V# {3 `$ V
t1(i)=n;
: B, d" ^+ Q& P7 _
end
% T$ |0 C$ h' X2 g
end
4 X$ o$ J1 T; F. [% V- L: a
[b,c]=sort(d);
$ V: Z4 r) ^- e; Q7 V" }( j1 J$ q, o
p=[1];pc=0;
2 G; o; e* w1 k5 X7 R; E2 Y
for i=1:length(a)
' N- O0 Y. n! o2 b" u
if k(t1(c(i)))<k(t(c(i)))
. m( r( s6 A- j }0 H) O
p=union(p,t(c(i)));
- i( K0 x7 {* N G' j% V
t(t1(c(i)),t(c(i)))=3;
" G2 e r& H, V. |$ F; I
end
+ v/ h5 r; G/ W( |8 G, q
if pc==0
/ ?; _3 q* N c, n- ?
tc=isempty(setdiff([1:n],p));
2 h( |$ _& |' [3 O6 N
if tc
$ {- u% U3 i" F) {; X t
t0=sum(t(1,
==3);
+ L. |4 D' f$ {5 Y" G4 f
if t0>=2
}. y' A. i9 t, f8 k8 A3 [1 t
nc=union(nc,1);
$ {: {$ Z4 T$ K$ b6 y
end
8 j1 U! T. N; v- c% `% Q7 A& }
break;
3 w7 Y1 @ Z/ S o9 E
end
& v/ H) |7 \! l* \! ]9 D
end
a3 i) P# H( Q3 m ?
end
/ B! Z$ V; M/ ?* [. T
$ a5 v6 P, W" D# ?
4 \9 J% f2 ?, I% U
end
作者:
ganquanlife
时间:
2013-3-3 15:03
如果没法改正,另外编一个求割点的代码也行阿
欢迎光临 数学建模社区-数学中国 (http://www.madio.net/)
Powered by Discuz! X2.5