数学建模社区-数学中国
标题:
求助关于求图割点的代码,哪里错了?怎么改正啊?
[打印本页]
作者:
ganquanlife
时间:
2013-3-3 14:54
标题:
求助关于求图割点的代码,哪里错了?怎么改正啊?
function [nc] = ncutf(g)
5 E( \8 z( y E5 ]$ K. M8 X4 V
%求割点的算法 g为邻接矩阵 nc为割点的集合
0 W2 _7 {; }: ~) C0 d6 U; F
n=size(g,1);
4 z9 I: e. k, p9 N% D
if n>=3
8 e9 w. N' f# j( j: q. X/ g
a=sum(g);
( }% U# h9 h) H
b=sum(a==2);
% ?, i% a# G9 S4 E i9 n5 ^
if b==n
/ D( ?: ` j8 J7 f9 m
fprintf('本图为圈,无割点。n')
4 k* R i% z. p# P
nc=0;
- F8 R/ c# v: x, m! @0 y
end
1 W6 \, h) v% Z+ l8 ]
else
; c% E$ T }; ]( s& y; f3 w
[w,k]=dfs3(g);
9 B" l5 `. I0 a# v
%nc=[];
/ O8 G) x/ e4 o
nc=isncf(w,k);
# |/ e' l3 v/ X, d; N
n=size(g,1);
3 K8 y4 y: G' f4 X4 L) @
for i=1:n
# u* S/ G6 _( Y- @; l
for j=1:n
! L) j/ T6 [5 b6 V* }& m
if w(i,j)>1
/ |+ B8 N0 ]9 s& V: e
if k(i)>k(j)
- X& ~% F1 L3 m2 A1 F$ }
g(i,j)=2;
9 t9 H3 m, e# g h: @/ e
else
- }5 I1 E0 z2 @
g(i,j)=3;
+ i2 D) ]$ @7 a2 e0 O8 j$ A- I+ ]
end
( N7 d0 V2 m: y7 N4 f& B: u' }
end
% j5 [9 h6 A# d. Y
end
! l" t( z4 m$ ^8 d4 T- f
end
}$ \3 R5 N8 Z0 b
& ~0 C' S+ s( M* J+ h9 ]
for i=1:n
4 ^8 V- `0 J$ s2 K' l3 v$ ]
f1=find(g(i,
==2);
6 Z/ D. w$ F+ o8 T6 w; u% E; Z. Y
f2=find(g(i,
==3);
: e: `, R. E+ r
f=union(f1,f2);
3 ^ u% o- O% L+ T9 j! N) `
l(i)=min([k(f) k(i)]);
+ D! h; Q' p9 e3 x+ z
end
0 `5 R' x* O a# H s/ Q+ j
; O1 Q) C0 H3 k7 c7 J8 z
for i=1:n
; M4 O7 u' q/ i2 c2 W, f& e4 @% I) B
for j=1:n
; V+ {, v' I, I4 u+ e4 X
if g(i,j)==3 & k(i)>1&l(j)>=k(i)
7 G2 T( r% x% M: |0 G; r
nc=union(i,nc);
9 ]- z/ \* h' d1 g
end
5 M/ M2 B3 f' k: [% m2 L
end
_! _0 k) r) i$ g8 {
end
4 \! ~" C4 Q1 C3 F# v4 J i
end
. Z" W0 a+ `9 T7 F$ P7 ]9 P
end
7 L& f$ A" A) q
' E" y& M6 ^1 s2 g' y( j
! T% a2 @- [4 @% i* z
function nc=isncf(w,k)
9 C' ?# A: N! g( Z' H' N: e: B6 F
nc=[];
* J" T( m) O" n: T' y: y
t=zeros(size(w));
% w u: O. s2 V8 M/ F
n=size(w,1);
; v$ b. q8 B9 M6 P/ ]( P2 v
a=find(w~=0);
+ y3 I# l* \, k5 B
for i=1:length(a)
' m$ u. h! {: V
d(i)=w(a(i));
$ {' R# H5 P- c4 Z) [# i
if a(i)/n>floor(a(i)/n)
" x8 w1 E) ~# I& b, z% r; ]& K
t(i)=floor(a(i)/n)+1;
, F$ E9 V: V. J) _% m2 V
else
2 v+ R- S8 P/ u+ X; n; M
t(i)=floor(a(i)/n);
/ Y& G. Q* \3 H. n# e
end
1 N- ~% S3 Q4 g- s8 w
t1(i)=mod(a(i),n);
" l7 Z0 P( `! _0 N2 q! Q
if t1(i)==0
4 c- U9 B+ }1 s. o& g
t1(i)=n;
2 E0 a! l9 M# e+ c2 N+ B
end
4 F! u8 H. z4 q d+ T$ C7 k3 d V5 k' L. H
end
' s2 r) r: Y4 Q! ~
[b,c]=sort(d);
/ j! D$ |+ _6 ]4 A, i4 i! c: b
p=[1];pc=0;
7 S2 S# z; m: ]! S% I2 @7 a
for i=1:length(a)
" }8 U5 J& p/ H. M
if k(t1(c(i)))<k(t(c(i)))
4 w+ D+ y% D' j+ Q& N
p=union(p,t(c(i)));
/ w; S g$ S3 ` C
t(t1(c(i)),t(c(i)))=3;
+ U. w+ m% {; I1 u
end
; n% c9 W1 y8 H8 e& [! o0 l
if pc==0
7 q. n5 o4 q8 C
tc=isempty(setdiff([1:n],p));
5 c& n# q K% H0 `, h
if tc
8 w& R3 X* w/ v- Q! m5 Q
t0=sum(t(1,
==3);
5 o" v. ?% C, h. j2 u0 c( k! {) j2 e$ r
if t0>=2
' v, q; o- w0 q, n( q7 b0 S
nc=union(nc,1);
8 R( C- _9 b$ B& p: [
end
$ A; ^. p$ ]* }/ ~
break;
. q0 {9 b: S" G+ x! a. J
end
! k1 J) B/ A+ R. d: f/ N; P' P3 X
end
( [; c" F, w, ~, B
end
; i9 y Y: X+ v- R
6 _& ~3 L4 T# P2 g0 ~4 C+ t
& M/ u3 D3 z* U9 i6 d. C! D
end
作者:
ganquanlife
时间:
2013-3-3 15:03
如果没法改正,另外编一个求割点的代码也行阿
欢迎光临 数学建模社区-数学中国 (http://www.madio.net/)
Powered by Discuz! X2.5