- 在线时间
- 3 小时
- 最后登录
- 2017-8-7
- 注册时间
- 2011-2-27
- 听众数
- 2
- 收听数
- 0
- 能力
- 0 分
- 体力
- 21 点
- 威望
- 0 点
- 阅读权限
- 20
- 积分
- 7
- 相册
- 0
- 日志
- 0
- 记录
- 0
- 帖子
- 1
- 主题
- 1
- 精华
- 0
- 分享
- 0
- 好友
- 0
升级   2.11% 该用户从未签到
 |
#include "stdio.h"
% X) p8 T J1 k& L1 A' _#include "string.h", S/ K1 E# \: K8 D/ ^
#define N 50 4 C8 c3 B2 R2 E8 S
int jisuan(int a[N][N][N],int h,int z,int i,int j);! B/ p% I( `. {/ c) e' G
void micifang(int a[N][N][N],int h,int t);
& H; N& c) d6 b3 @void buer(int a[N][N][N],int h);
3 f. C! C' W% q: P5 D1 s7 Kvoid warshall(int a[N][N][N],int h);
% T; i9 R, X4 E- z8 v5 P/ K, Lmain()
2 w! T$ h! J& ^ o; f6 c{
0 o' r3 K) D& ~: z0 \' oint i,h,j,t;: r; M8 {" t& i) a
int a[N][N][N];- c8 b% ^; }3 u6 t
printf("请输入邻接矩阵A的行数(或列数):\n");+ c4 h1 [/ J# y& D& T
scanf("%d",&h);
9 E" W/ @( \$ F* sprintf("\n请输入邻接矩阵A:\n\n");) \! K# L$ y: T1 L2 N
for(i=0;i<h;i++); ^3 V x0 P! {9 x! K' ~6 _1 f
{& A ]3 X. J0 F( l$ K/ C
printf("请输入邻接矩阵A的第%d行.\n",i+1);
) A% a- ]5 l. m) K3 h* z; a1 Rfor(j=0;j<h;j++)& L0 j! {. a) W) c
scanf("%d",&a[0][i][j]);
' F$ v! i3 R* R8 i6 L}% T1 j; a2 G4 |; @: ^: p! d
printf("\n邻接矩阵A为:\n");' R9 X: H& n' _ k& b4 C
for(i=0;i<h;i++)6 [- }0 R( w1 t [# S( A
{
: `6 f: |+ p9 a, w F2 Dfor(j=0;j<h;j++)) L E9 @' V7 ~1 l) u6 i
printf(" %d ",a[0][i][j]);
W9 O; q( W! ]6 n) P& Rprintf("\n");9 c5 @& \7 l! t
}
. ~- [2 U2 y; fprintf("\n\n\n算法一:\n");
" H! U& W @/ x6 Fprintf("\n矩阵A的1次方为:\n");$ S1 \5 _% [9 z( H) t! H5 S M
for(i=0;i<h;i++): o& s. z- J! i; ?( }
{& N) s7 P8 `$ w4 g: R+ `
for(j=0;j<h;j++)2 U/ k6 @% a# H6 F- |( E
printf(" %d ",a[0][i][j]);
- Y1 g7 I" v6 Y- y. P% }0 Oprintf("\n");
7 @& p: F ]+ q' Z! |% C0 j, ~}; K7 W% s* l2 y9 \2 ^1 G
micifang(a,h,2);
3 s$ d3 m3 a& _5 ifor(i=0;i<h;i++)* i6 U3 v+ {) F+ r
for(j=0;j<h;j++), @; a' u: M: [+ I4 f
a[h][i][j]=0; //全部赋值为0!
8 u% T8 n& k6 gfor(i=0;i<h;i++)
# P* G+ q. \. \for(j=0;j<h;j++)
. X! K. k4 M; p* lfor(t=0;t<h;t++)
8 i- ?/ O4 L3 A( y% Aa[h][i][j]=a[h][i][j]+a[t][i][j];
) X+ d3 F! r( jprintf("\n\nB的值如下:\n");: U+ b1 L8 b! K( `; U
for(i=0;i<h;i++)8 z1 c- r) J# E1 I, ~& Y1 Q9 i$ R
{- h/ r! Q! h% X
for(j=0;j<h;j++)+ F- L2 ?; [/ s+ r8 j6 v
printf(" %d ",a[h][i][j]);
5 m+ r) u6 `1 t D4 B" zprintf("\n");, u3 V0 O5 ?( v, L% \
}
" u/ k4 F' K% ]/ Oprintf("\n\n\n算法二:\n");; [3 l# k7 p7 a7 r: i$ S" c @; S2 e7 C
printf("\n矩阵A的1次布尔幂次方为:\n");" @5 l# k( `4 o
for(i=0;i<h;i++)
5 Y9 {& k- Y* \) N3 k( G{
2 Q$ ]" _& m3 x: @$ u% ?for(j=0;j<h;j++) R* I4 z/ [4 g# G$ r# k) R
{
8 A$ H: b6 X5 Xif(a[0][i][j]>1)
. L9 W* t& V1 {9 P. x* Ua[0][i][j]=1;& K. ` C. F; M5 H! K& ?2 [! @
printf(" %d ",a[0][i][j]);7 l" n4 M6 A* F- a* @4 d1 [
}
, ~: c( J9 {% r" m6 |) s' Sprintf("\n");
$ M* _& h( M! a2 N5 H7 L* {}8 A/ V+ \0 f3 J: V5 m9 w4 _- v, b
buer(a,h,2);' b# U+ J5 U- H7 p2 }
printf("\n\nP的值如下:\n");
' j' v# ]" I. K3 K$ h9 g( [1 K3 Nfor(i=0;i<h;i++)
# ~4 V3 L, Y) i. @! Z{. k+ o9 t- S; C- {
for(j=0;j<h;j++)0 _- j- r3 R! G; R. M* w, e1 V
{ ; L- U4 S- O) M2 {* m% B
if(a[h][i][j]>1)
4 m1 O5 c, A5 o7 s; L+ B1 f+ h* Ra[h][i][j]=1;
* o3 @* W' t8 a T6 Q9 D7 dprintf(" %d ",a[h][i][j]);- r, @: H! c; G! o5 I$ E9 H
}
# p- G8 ^5 F, p" I3 q4 D7 Sprintf("\n");- k% U" R# V6 G6 G" Z; Z
}9 |% S/ j( e, g- k" k! m1 k
printf("\n\n\nwarshall算法:\n\n");
) G' T, n: N( L; X/ g
0 c! Q1 G0 l1 sfor(i=0;i<h;i++) //处理邻接矩阵A.转化成可达矩阵。
/ ]8 V$ y% _7 i" }" C& |for(j=0;j<h;j++), J- ^+ t1 A7 H8 S
if(a[0][i][j]!=0)
: h3 t6 R* m: A7 ia[0][i][j]=1;
! C! z# E* X. }2 S O( Fprintf("整理后的可达矩阵为:\n");4 l- B' r, `6 ]$ b
for(i=0;i<h;i++)/ b7 v% J" m& T3 O# d$ s/ u# }. j# e
{
9 x3 [* K! E! u+ ?for(j=0;j<h;j++)
/ u0 x4 B9 E0 r' ~4 G5 [& bprintf(" %d ",a[0][i][j]);' B& A8 |% Z, \ ^; t
printf("\n");
. n) G* u- Y' A9 d}. D6 a! H/ Y2 b' R) a! v B$ O! [9 K
warshall(a,h);3 p1 i) h; k F& F
getch();
6 n6 r9 {0 T3 S+ x4 @}8 Z% t3 j. _& g' M7 \2 R
int jisuan(int a[N][N][N],int h,int z,int i,int j); ^( v0 C. k5 R: A8 a2 G6 E
{
9 b4 ?$ z$ @" w* E5 X) Q$ ]int s,jg=0;
7 w9 A( N: I( W# w. Bif(z==2)
& C& F |3 h" r2 b6 Z2 D4 a0 ?7 zfor(s=0;s<h;s++). a/ w1 [3 i# a% H
jg=jg+a[z-2][i][s]*a[z-2][s][j];
) _5 ~( X; g1 P- J( b+ welse C9 _/ O1 v/ _: [' O6 J" R9 U
for(s=0;s<h;s++)1 `8 L( k5 ^, p+ e% B" ~
jg=jg+a[z-2][i][s]*a[0][s][j];
1 q1 _: h, f1 h& Hreturn jg; * j6 [; e* Q M& i8 J4 i" j: d
}, K3 z9 i! h( L' w% B' S# E+ }
void micifang(int a[N][N][N],int h,int t)
+ s2 z' \; |' D+ m% C* p. N( ]% P{
) ^7 ~8 w9 z \# a* p" [3 aint i,j,s=0;4 H5 f7 H3 Z& t0 p* b9 G
int z=t;
* r/ I Y8 A) v$ t4 k: g! `% R {if(z<h) //矩阵的值不全为零。8 x# \4 d/ E6 j9 l# C9 L1 w
{
4 U) f2 |/ `: O% s# D$ w# Y+ pfor(i=0;i<h;i++)
7 E1 f2 ]1 X' p7 T* w8 E( F7 Afor(j=0;j<h;j++)
i( H- `3 H- s- z) ]a[z-1][i][j]=0; //全部赋值为0!7 v1 b- i. o3 r [3 w" \ m
for(i=0;i<h;i++)0 p: }1 j" E1 L# A
for(j=0;j<h;j++)
: g) c# w1 i, D0 ca[z-1][i][j]=jisuan(a,h,z,i,j);( P8 t' D' X. U0 `3 U I; [) Z% w: M
printf("\n矩阵A的%d次方为:\n",z);
. {9 p3 J4 |6 {& U# M# Pfor(i=0;i<h;i++)
. S* O7 p3 C2 e& ~7 H. ^{
5 t9 R% g8 f6 K w f1 o+ bfor(j=0;j<h;j++)$ g6 G" I! a6 m9 c6 C6 a% Z+ f ^* O
printf(" %d ",a[z-1][i][j]);
* J7 ?" m" O3 j {printf("\n");5 E. e# z/ J$ v G1 V: {
}+ x3 s' [- S/ S$ \6 g. Z0 B
micifang(a,h,++z);
+ ~1 ?2 N, P- |% N/ u}) o& N5 z+ m K4 W I0 o3 `
}
. c: P3 Q, c3 }4 A1 W7 _void buer(int a[N][N][N],int h,int t)& v: h% D- ^9 J% z6 V
{, l9 k- ?% ~' m- E9 `
int i,j,s=0;2 j) N% [2 P+ o& C2 M; Z' a( h) L
int z=t;
1 j$ U) B' x2 e3 r0 zif(z<h) //矩阵的值不全为零。8 \1 `; X, R# a, u Z) D
{ : y4 N' k/ N! p, @0 |8 d: M
for(i=0;i<h;i++)
: X: M8 [5 o @1 z2 a$ [( L4 Vfor(j=0;j<h;j++)
7 D r) }; O! g% |0 {a[z-1][i][j]=0; //全部赋值为0!& p% n0 I; T2 I$ p! I
for(i=0;i<h;i++)/ q7 B2 R- _# \8 d% b& v
for(j=0;j<h;j++)
, b6 r5 d: ?0 N. g# Ia[z-1][i][j]=jisuan(a,h,z,i,j);7 p. H0 |0 C! t
printf("\n矩阵A的%d次布尔幂次方为:\n",z);; w- {1 l6 P$ d" g1 v" K6 Z) g/ x
for(i=0;i<h;i++)
: L D. D* s: e( m- }$ R: [* J- g( ~{
' Q$ \% y" S4 _( D8 i/ W& hfor(j=0;j<h;j++)9 v# ?9 f" H7 H
{
4 y0 l1 G. t' C L( P; C2 u* uif(a[z-1][i][j]>1)
5 Z3 f j ~2 Y% \8 Ea[z-1][i][j]=1; 4 \ T! V) }- D
printf(" %d ",a[z-1][i][j]);; V- r2 R- q9 I; j6 o) C# i" r
}) b/ l8 N& a# p: _+ j9 n6 W
printf("\n");
8 W) J. K; w/ W+ ^$ D) @8 i}& R$ R0 s) _- A: \7 Q
buer(a,h,++z);
: q Q, v4 F, M; y2 U; {0 Y}
- m% `6 @* C. v6 j3 G}
6 F& a% S9 B, C8 M+ |2 evoid warshall(int a[N][N][N],int h)' G3 O+ e, u& H; Z) D f
{
9 X p+ g: e7 c8 E g/ F. bint i,j,p,q,r=0,s;
1 c5 o7 H5 J( c! \- ?for(j=0;j<h;j++)
1 {8 h# w# {2 H% R, S, U( J9 nfor(i=0;i<h;i++)$ Z% ]) Q" C x7 D9 s4 z
if(i!=j && a[0][i][j]==1)" E! N5 C1 O7 r% W5 l$ ?
{
+ }3 C8 n& a- z5 N0 Yfor(s=0;s<h;s++)
- L6 \- o' {. L6 z: x{
& T& l+ |( c. `, Y% K ga[0][i][s]=a[0][i][s]+a[0][j][s];# [' F$ Y( D/ K8 \4 s
if(a[0][i][s]==2)
7 a, e5 K7 B9 @& n+ n& I# S$ qa[0][i][s]=1;
- A* A8 J& a$ o" `( o}
# h8 p/ e4 q$ Z/ ^7 b+ @0 w, Aprintf("\n第%d次运算的结果如下:\n",++r);: B5 s. ~- T0 h0 H1 }" B# E
for(p=0;p<h;p++)
G6 \4 c, ^- T4 h) Z, {{
! s9 L, ]1 I; X% U$ {, C8 Qfor(q=0;q<h;q++)
7 o( K1 E$ }5 X7 M. [& Eprintf(" %d ",a[0][p][q]);8 ^/ H1 J6 j# E1 R8 i) }
printf("\n");" d% ]; x. \& s$ e% |
}( I9 M I" j" a) B8 D; t/ w
}' i. J, Y2 F9 @, F
} |
zan
|