- 在线时间
- 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", M7 w7 H' v( {. d: {/ J: x. ^$ C% S
#include "string.h"8 _: W% J+ Q, A! |& t- c* `
#define N 50
0 H" X+ C( L% r0 V: z! e. wint jisuan(int a[N][N][N],int h,int z,int i,int j);
2 B, g2 c8 a }7 `6 ^void micifang(int a[N][N][N],int h,int t);) d" V2 y7 T C) x; n5 B, i
void buer(int a[N][N][N],int h);
' G% i4 _! B0 o' ivoid warshall(int a[N][N][N],int h);3 q" V9 l5 c# U3 ^2 z7 w
main()) E0 Y0 a0 d! Z- X. i& Y# E; \
{3 s+ R ]) r X0 J
int i,h,j,t;! t/ O- ~; o9 a' K& f+ S7 A
int a[N][N][N];$ n% }9 _% _4 S2 Q% U
printf("请输入邻接矩阵A的行数(或列数):\n");! U5 j6 ]4 V# C S3 Q' f8 P! G' C4 v' G
scanf("%d",&h);" U9 S/ K( t9 f( R" e0 N5 g. P
printf("\n请输入邻接矩阵A:\n\n");* ?- s' q* I1 R3 U1 q
for(i=0;i<h;i++)# r& V% f% f4 x$ C7 Z; \
{, \! V R" A. p1 V( O
printf("请输入邻接矩阵A的第%d行.\n",i+1);
, J r+ S% b, N% s4 X* _& |% jfor(j=0;j<h;j++), R7 C+ ~; K0 P0 @6 k$ w
scanf("%d",&a[0][i][j]); # L0 H" {' i. h* R5 E5 D$ J
}7 A. }0 c- q$ y: K& j; ?
printf("\n邻接矩阵A为:\n");
6 x+ e5 q J$ r% D5 V) F1 N" ~5 ufor(i=0;i<h;i++)
4 ^6 j# c; C }5 E5 S! o1 @{
, f2 E& J. Q) e* N4 efor(j=0;j<h;j++)
2 G1 J/ ^% C$ @4 t# ~7 Nprintf(" %d ",a[0][i][j]);" t, t4 V( A8 [% `2 l4 c
printf("\n");
5 p, n( u2 K! Y}
; m5 S$ m+ c) \ o% hprintf("\n\n\n算法一:\n");
/ L! _! K9 |. S2 Dprintf("\n矩阵A的1次方为:\n");5 W z, a0 \" a+ w
for(i=0;i<h;i++); w6 b# O2 s' I; n& B4 n0 j
{; M9 F1 ~3 }! N8 M" P/ i
for(j=0;j<h;j++)& Q5 {( r6 {; S+ }0 _0 f
printf(" %d ",a[0][i][j]);
( Q* F- [3 y& d. A' f$ @printf("\n");6 L1 n+ \0 m8 j% d" S
}
: j! g8 Z2 N/ i m9 hmicifang(a,h,2);
- r$ J* M+ G' M1 |for(i=0;i<h;i++)
, }) \7 \: ~" A7 L2 @# y: Ffor(j=0;j<h;j++)
6 z0 C0 E4 o6 {9 b, y1 Ea[h][i][j]=0; //全部赋值为0!8 V2 q6 W+ n# j' w7 l
for(i=0;i<h;i++)
, G/ [% _$ C/ c, B7 ^ ifor(j=0;j<h;j++), P: b+ Q( g B9 K4 f' a. B1 c) O3 N
for(t=0;t<h;t++)
- e3 K: _. v9 h* l! |7 x# I8 \1 ~a[h][i][j]=a[h][i][j]+a[t][i][j];
4 _" K# v- W' Z# l: _3 Xprintf("\n\nB的值如下:\n");1 ^3 \% w( C6 D8 w% ^' k
for(i=0;i<h;i++)2 I* l- k# f x
{
: X# E7 w# s sfor(j=0;j<h;j++)
6 A9 P' { y6 M, E& ~, p% ^4 K+ e9 {printf(" %d ",a[h][i][j]);- S9 L, ^6 m8 ^9 c
printf("\n");
9 T6 S; g, I- @. D6 R% m} L9 d" l" h/ i6 ~0 B. S1 S! S* f
printf("\n\n\n算法二:\n");
: V( F7 a' M# t9 S9 F4 ~printf("\n矩阵A的1次布尔幂次方为:\n");" h( M! T7 a; ~0 w: T" C# `) p. p8 O1 n
for(i=0;i<h;i++)
4 n2 o% e0 d' ^1 P& W{7 z A4 t" k- L" n% L- p
for(j=0;j<h;j++)
. |' J- R- r% N{
' P7 r, r) O! c- Q9 o: fif(a[0][i][j]>1)$ o( r! @3 b" U/ q% T) J
a[0][i][j]=1;+ p" M2 u. A5 q2 e( }1 _
printf(" %d ",a[0][i][j]);
& K3 C/ R( F- m}
6 a I& o* I ^' E2 [0 Hprintf("\n");
$ y( @" m3 q; J- X2 Y0 E}
# e0 y7 p+ `! l: \" \1 qbuer(a,h,2);0 i3 f# b; B" D: R
printf("\n\nP的值如下:\n");5 d% `" a3 F: r! P
for(i=0;i<h;i++)! J+ E# Y4 h0 D7 `
{
& D! z, l- s5 k. dfor(j=0;j<h;j++)
- e1 a" e) @, J1 {* R{
% G$ q; \! W7 M, B" |if(a[h][i][j]>1)
- c2 V5 y2 B. ~4 ^: d( x8 R+ fa[h][i][j]=1;9 Z) C0 F1 k: J. j) S' @
printf(" %d ",a[h][i][j]); N) v1 n. o9 r) Q+ B6 r/ t# D
}! c/ b( ^* t3 f
printf("\n");( {; c' t. Q f1 ^9 h
}
' _5 h5 f+ V8 `/ {( g1 ~printf("\n\n\nwarshall算法:\n\n");
0 f0 a% x1 w; C1 O
1 d& \5 c8 X* k9 [for(i=0;i<h;i++) //处理邻接矩阵A.转化成可达矩阵。
' Q5 o- u3 F0 K2 `for(j=0;j<h;j++)
5 v# v" t6 q$ g: M/ q4 cif(a[0][i][j]!=0)
, D6 u+ S p: N+ n; M3 X* Sa[0][i][j]=1;
$ I# D; p7 D$ R+ h8 V, f% M9 b# dprintf("整理后的可达矩阵为:\n");! u% G, I' [0 a' Q
for(i=0;i<h;i++)
8 g9 r, J* s3 c5 Y{0 k, m8 B* H" @. L8 V' a" i
for(j=0;j<h;j++)" v5 p! y) ^4 U" V8 R
printf(" %d ",a[0][i][j]);3 C4 U3 E x! ]" @$ y
printf("\n");) u6 G" y- ~0 N5 z, p
}& G' X; E- w% U# f
warshall(a,h);6 p* N- s2 U# ~/ s
getch();
+ j k8 M) Q: M: |}
) \) o, c) i( [1 ?, z0 @" ^int jisuan(int a[N][N][N],int h,int z,int i,int j)
0 v. _! h$ ?% y* R{& T4 Q1 ~( s. Y8 g, H
int s,jg=0;
% h& b6 M. h$ V0 J+ A+ T$ ~, yif(z==2)/ N4 |+ |1 R1 [( }& E7 F. [) A* e
for(s=0;s<h;s++)( f: G$ |3 z! _, ]+ S3 [
jg=jg+a[z-2][i][s]*a[z-2][s][j];2 Q0 B- |* j* ~3 W$ g
else - ?: w& U' c6 b( Z
for(s=0;s<h;s++): }3 r/ H5 j, _
jg=jg+a[z-2][i][s]*a[0][s][j];" e3 C) C/ S' e: X4 o9 w; i
return jg; * K/ Q/ H/ ~, `& q. H2 `( a0 `
}
7 F, e5 n$ S4 @$ q$ ~6 t# qvoid micifang(int a[N][N][N],int h,int t)0 u5 v+ S K( }+ e
{* d8 Y: S3 I" T! g
int i,j,s=0;
4 S* B- w4 E5 k( j [) bint z=t;
3 x4 l# W/ u) n: }% Z+ cif(z<h) //矩阵的值不全为零。
) t; _/ `! v- z{
# o9 j; j/ |# N: O4 N/ dfor(i=0;i<h;i++). ^. l: o4 t5 }+ {4 i' w
for(j=0;j<h;j++)
0 n: W) ^6 y, {" Y% M1 E( b: Fa[z-1][i][j]=0; //全部赋值为0!' ?& `3 G& z7 K& |) O
for(i=0;i<h;i++)$ n8 W( k9 D2 P4 e1 [" V9 P
for(j=0;j<h;j++), c6 f) }# A# O; U( u
a[z-1][i][j]=jisuan(a,h,z,i,j);
, G. Z' B4 o- p. L# z- tprintf("\n矩阵A的%d次方为:\n",z);4 B4 {( o. W+ f ?6 c5 A
for(i=0;i<h;i++)( m0 b, o3 V: T
{4 u; a, x: g) O3 ?6 t5 h
for(j=0;j<h;j++)% B0 i& H9 o! c* |0 D
printf(" %d ",a[z-1][i][j]);: Z1 P. [# n( k7 h6 Z E1 N% n
printf("\n");
/ C6 Y4 y0 S, Y/ G}4 }9 b4 n& {0 b& O5 m/ p
micifang(a,h,++z);
) [( e, R% ]2 K' Q% j" i}
. ]# m# v3 C* c" L. ?$ F3 h}/ E5 w/ d" `4 ]. V8 @
void buer(int a[N][N][N],int h,int t)5 [) F5 e/ n1 [3 i1 e
{
* ~" e5 `9 }) X9 ^9 }0 y" v2 dint i,j,s=0;. v- z& w2 j, k/ o' R5 J6 Q( y( D
int z=t;1 K4 |( D4 l% q! } b/ M
if(z<h) //矩阵的值不全为零。
1 D r. ~/ r2 G/ Y{
1 ~" n6 W' M0 H% S" ^. {for(i=0;i<h;i++)
% ^, P4 j# k5 r) _8 j3 x7 Jfor(j=0;j<h;j++)) z+ C$ F) R" o" \7 Z! o' Q! T/ c6 [
a[z-1][i][j]=0; //全部赋值为0!
* f+ s1 q# P2 _( |for(i=0;i<h;i++); `: Y5 f6 R0 e6 E, F
for(j=0;j<h;j++)8 Y. k a) l0 j# |; B" B6 g
a[z-1][i][j]=jisuan(a,h,z,i,j);2 h1 W1 n: q/ N3 q
printf("\n矩阵A的%d次布尔幂次方为:\n",z);
" s, {& Y% o T, Q2 Y' t: F Rfor(i=0;i<h;i++)
. x3 T- z/ A: Q6 J{
3 H# D, Q% `3 s+ Xfor(j=0;j<h;j++)+ |6 f% x2 V" g! [. @* Z5 J* d2 e" {
{ - d! H' o: m. J% d
if(a[z-1][i][j]>1)4 i9 `$ h% `( ?: O/ C0 C
a[z-1][i][j]=1; & y0 W, ?* f) p/ Y- U
printf(" %d ",a[z-1][i][j]);
k8 R# _- ^! O6 l# i}
2 G% x( H$ g% `9 H. a0 L) g+ aprintf("\n");
8 N: i; {8 n2 B m2 f6 e) \}
' R! S1 z4 w! _: gbuer(a,h,++z); 6 Q& k5 j& f0 z$ p; ?- d/ q
}. a" }' N) `3 x
}* h' v% f( Q5 d1 P
void warshall(int a[N][N][N],int h)! I. C n8 r2 a1 s" b2 N
{6 z) a& B+ O" ]! O0 ?( P; e8 u
int i,j,p,q,r=0,s;& T8 p" A) t! I! f
for(j=0;j<h;j++)5 T! S& Y# I# Z
for(i=0;i<h;i++)
& Q4 s& B$ G7 O2 k) K0 V0 dif(i!=j && a[0][i][j]==1)
% \ e, r7 y/ G: b! ~& \0 {{
- c% F7 S3 d/ k9 c# A d1 `for(s=0;s<h;s++)4 _ W. t# C* X) Y/ o7 |3 p2 m
{
v% d0 d! ] U% Z. Na[0][i][s]=a[0][i][s]+a[0][j][s];
5 G/ {# O8 @3 A2 u1 n8 aif(a[0][i][s]==2)7 t* B i$ `5 d9 i" W
a[0][i][s]=1;0 Q' _3 w* |+ _1 V B) R Z. r
}
8 C/ ]# B3 {% @; Tprintf("\n第%d次运算的结果如下:\n",++r);
/ d( B6 {4 E3 C/ d: {4 afor(p=0;p<h;p++)
9 r8 R' G9 l/ t: w{8 A# J9 `" n+ W2 ?; _
for(q=0;q<h;q++)% o) C! U' Q/ d$ x% b5 W. j v
printf(" %d ",a[0][p][q]);
7 r9 L" m+ R) D. e: Bprintf("\n");/ O4 [! B# j# f- w5 @: ` H# O8 h
}' [3 z) E( } C" l/ |, c
}
* V$ _$ v" k" {: j# r0 P} |
zan
|