- 在线时间
- 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"
1 G) D2 P& T! O8 f9 X- N#include "string.h"3 b! v' N V7 \0 d7 P! T. H% q
#define N 50 " a7 \' G l' r0 V: }
int jisuan(int a[N][N][N],int h,int z,int i,int j);: a! R' R6 q- `. }
void micifang(int a[N][N][N],int h,int t);, _0 `; e* w* n3 N4 [; f- _
void buer(int a[N][N][N],int h);
" G; u( f* x& c( G0 u/ x8 ?void warshall(int a[N][N][N],int h);. y# J$ G" x, B$ a$ c5 g% [
main()9 Z$ K9 z, B% K. x
{8 p0 e' k- d! {% H' I7 \% Z1 P
int i,h,j,t;
4 y% g" w* Z) W4 v1 l3 L) ~& p2 gint a[N][N][N];8 i7 r# n; @* l
printf("请输入邻接矩阵A的行数(或列数):\n");
8 P8 B6 B1 j h4 }scanf("%d",&h);
' s, H" Z# R( P/ A# Fprintf("\n请输入邻接矩阵A:\n\n");' x5 g! T+ p/ S3 a9 `! A% q; W2 d+ Z/ D
for(i=0;i<h;i++)
7 o$ l' i2 O9 `+ e6 J$ u{; B* `0 f4 m, [) X( o; ]! U4 t
printf("请输入邻接矩阵A的第%d行.\n",i+1);
j1 c) A @5 n7 o4 b' lfor(j=0;j<h;j++) E) D) e3 `9 x1 B: l! Y
scanf("%d",&a[0][i][j]); 3 ]; i+ z/ a/ J( ~' F2 F
}9 I$ n) V9 n# N$ n7 K0 f6 J8 s
printf("\n邻接矩阵A为:\n");
3 W$ K! K6 h/ y9 T, Z3 ffor(i=0;i<h;i++)9 c8 M7 H5 {# u/ q: G& C
{% G. j. {/ b/ h
for(j=0;j<h;j++)# m u: Q$ d4 B# C! I
printf(" %d ",a[0][i][j]);9 ~ c' W7 c0 n; @+ L; V
printf("\n");( r& l$ d1 j$ G# @: c
}, o/ K, F+ f* B8 F' C
printf("\n\n\n算法一:\n");
0 T. M* z0 W; O/ D% w0 j) @6 ] f a3 l* R* nprintf("\n矩阵A的1次方为:\n");, O. `* B6 S7 c/ P2 O7 e
for(i=0;i<h;i++)3 R# q, Q6 S3 W; y* q+ j% W: U7 ~" ]8 ^
{
6 ~! S; L6 A7 W4 Mfor(j=0;j<h;j++)
2 H/ p' D- J$ L0 Lprintf(" %d ",a[0][i][j]);
% i5 V2 f' O; S8 `$ T! Uprintf("\n");
* M# Y9 y7 L% `% a( c}4 z7 L0 w( G7 }2 G) d
micifang(a,h,2);+ Y" T/ ]$ |, U. N
for(i=0;i<h;i++)) E8 V- a5 l: ~8 q5 @ Z
for(j=0;j<h;j++)
* ^ W9 \% R( `; h( ]a[h][i][j]=0; //全部赋值为0!
/ Z: T( _+ [. m. Q; Nfor(i=0;i<h;i++)
/ |! P- M. t0 f e4 ffor(j=0;j<h;j++); @3 W4 d0 Q; N9 ~, e: m
for(t=0;t<h;t++)
5 J, I9 i3 @( p& a* B U* [$ _; w- y& aa[h][i][j]=a[h][i][j]+a[t][i][j];
- m0 x$ Z* H% C& t6 Rprintf("\n\nB的值如下:\n");4 H# V8 C9 k4 ~8 a7 q3 P
for(i=0;i<h;i++)
5 r4 j& `" G& Y% K. Y2 ~{
/ M) e/ i$ u! N% I$ j& ofor(j=0;j<h;j++)
2 ]$ m9 [7 e' r oprintf(" %d ",a[h][i][j]);
9 F6 E( V( {5 ?) [3 Lprintf("\n");
) [# |3 @2 f8 c% y9 r# A! u}8 Y/ _) }+ l) G! Z
printf("\n\n\n算法二:\n");" z8 u* E( t+ A! s- B
printf("\n矩阵A的1次布尔幂次方为:\n");( U2 \1 \. h/ |8 Q- T
for(i=0;i<h;i++)
1 A8 v( x, A1 y; E9 i$ S; v2 g{" ?4 U2 g( U: d; m8 F3 f
for(j=0;j<h;j++)
9 M& c8 N7 L0 c( A{ ?" F% l9 k, b W+ o$ X% Z: A
if(a[0][i][j]>1)' z- _' Z1 M k1 m& o$ X
a[0][i][j]=1;; L7 c9 ?$ q: B* q
printf(" %d ",a[0][i][j]);4 F' d. a; \1 J' o" }
}% ^( M! @$ s) e% L; R
printf("\n");
7 }9 P- Z% b7 e& ]( S4 \}4 L. A5 k* H3 I( t. f* b$ ?* E! V
buer(a,h,2);
/ i8 r! K/ c+ n" b" W1 S. i/ `printf("\n\nP的值如下:\n");
; a k. ~7 t# C5 r1 y. vfor(i=0;i<h;i++)+ E8 _8 V4 H' N* ]+ F7 J
{, Z! b' w* q" H/ b' J0 ^
for(j=0;j<h;j++)
7 A; ?2 O3 d9 v) E- @{ 7 I9 ? r6 e1 I# F( `2 z, f3 i/ |
if(a[h][i][j]>1)0 ^" g& w) \. y( [
a[h][i][j]=1;" Q2 x9 R5 I! ]$ e5 o4 N. p
printf(" %d ",a[h][i][j]);
% c4 y0 H7 i+ b/ y+ b}
1 r- I, }9 t: {0 uprintf("\n");5 R8 k" z) r R& p& _2 W* J
}
0 J* v1 G8 f3 q u; hprintf("\n\n\nwarshall算法:\n\n");
; L Z) M! v. X8 i
' a& s' v5 G, | H& D) `for(i=0;i<h;i++) //处理邻接矩阵A.转化成可达矩阵。4 _1 v5 V% o/ H& m+ z, j
for(j=0;j<h;j++)4 b: i2 x, B: n2 q) A
if(a[0][i][j]!=0)
/ R2 C7 T$ J& b# m |a[0][i][j]=1;) }2 L! k4 c/ l2 p B8 X3 r
printf("整理后的可达矩阵为:\n");
; i+ _( `* x1 E7 L' nfor(i=0;i<h;i++)0 V5 T8 R8 S& n8 u4 i
{, p, ]' A( Q4 o1 O* o# T, r* W H
for(j=0;j<h;j++)
5 y v' L7 k, w9 }* Pprintf(" %d ",a[0][i][j]);' X% j" j. ~2 C( D- E s
printf("\n");7 ^9 |4 b/ x z$ N% r) v& z* F0 t
}
. J% k+ @: E) P' i/ cwarshall(a,h);
5 G c$ }7 a7 v E: Z* a' Hgetch();
, T: j ~- X' j& o$ P1 Q# x}
5 `5 t2 y& | {* M* T" |int jisuan(int a[N][N][N],int h,int z,int i,int j)0 O% q) }. h) b0 w$ S c' G+ c( x
{) j7 @1 k9 n1 h0 G8 Q' Q
int s,jg=0; \/ F) n( h( @' p$ o, H8 r
if(z==2)5 n: j+ m# ^: ^5 P
for(s=0;s<h;s++)0 f; n2 f! {' w
jg=jg+a[z-2][i][s]*a[z-2][s][j];
, p$ |% p$ j+ m; v# yelse
% U" f$ k, d1 B6 w2 C2 F4 _for(s=0;s<h;s++)
, G. h: s' {7 g. }jg=jg+a[z-2][i][s]*a[0][s][j];: T3 g( m) j7 c; x# ?1 m/ x
return jg;
! g% m' S8 m3 H8 z3 h6 t) y}5 D, l: i* g: @: R; Q R2 n
void micifang(int a[N][N][N],int h,int t)+ u) R1 i' m5 ]) J! g) j
{
" o1 V6 F+ \$ n" z! p5 p. w# Vint i,j,s=0;
8 e# z$ x) r9 ^4 h# nint z=t;
$ Q7 z& ?0 H x5 H% x, F! vif(z<h) //矩阵的值不全为零。
, @: o# t" B+ _: k1 c |{
( P% P( T7 r( M, @for(i=0;i<h;i++)" X' I2 G/ [- H" C
for(j=0;j<h;j++)
! g& F: C; Z/ a/ y4 p" K Q7 ]a[z-1][i][j]=0; //全部赋值为0!0 V# k2 L: r- [0 U+ H: j& W: l
for(i=0;i<h;i++)
9 U( ^4 L, ?6 x1 jfor(j=0;j<h;j++)
1 v, j; p4 B* H( E$ W" na[z-1][i][j]=jisuan(a,h,z,i,j);
% X. x! R2 g: h6 Y; Wprintf("\n矩阵A的%d次方为:\n",z);
6 u5 o+ V8 u2 ^: P- o3 }+ ^for(i=0;i<h;i++)
" M+ b; [- J, i7 F: h1 g{0 R5 t4 e" {' P, {
for(j=0;j<h;j++)
- p* S: v# t8 n6 k* j5 j. i% U; _printf(" %d ",a[z-1][i][j]); ^8 B; \1 t: V
printf("\n");! y) ^ `. {! F& H4 k
}* ~9 {4 y" P" K+ S& D
micifang(a,h,++z); : M4 S3 \& ^( h! ?9 W, f8 G; z- _
}" j: l, x' @. ~8 ~
}. \3 `) b9 t. v* C7 D
void buer(int a[N][N][N],int h,int t); p* U0 V6 p. q7 D/ U4 H
{
+ P* B1 C8 P, t9 m; hint i,j,s=0;7 I- v1 l* N! m. T, Y5 `+ {
int z=t;
, Z$ C: k( @5 ?* U* c9 ^8 Y5 v1 yif(z<h) //矩阵的值不全为零。
. V; d/ u2 o' c& p+ y{ " W. q9 \% O8 l. D. h) v
for(i=0;i<h;i++)3 l0 v0 z Y/ G" s# W
for(j=0;j<h;j++)
# f" B5 {" t# V \. q, W7 Ra[z-1][i][j]=0; //全部赋值为0!( D \; {. K$ \
for(i=0;i<h;i++)1 G2 d O3 g" A7 P5 P) U0 Y
for(j=0;j<h;j++)
8 S' N! E3 J/ b) U8 Ka[z-1][i][j]=jisuan(a,h,z,i,j);; q$ U4 P' V! z; E8 P
printf("\n矩阵A的%d次布尔幂次方为:\n",z);
& c' n3 Y3 i1 e6 yfor(i=0;i<h;i++). @; J r0 O6 h3 H' |6 I" P
{2 J9 R1 Y V1 z1 I1 Q5 X& L( a; E* r
for(j=0;j<h;j++)
% p- }- k% [% |0 G0 G{
0 Q( U+ Z$ k5 ~2 J) X7 ?; ?if(a[z-1][i][j]>1)
! p4 J! a& J% o: K; C) J8 Aa[z-1][i][j]=1; $ \$ H, u+ x9 K
printf(" %d ",a[z-1][i][j]);
/ e1 w7 @& Q! y9 U/ G' p( h}2 C- |1 p' w c5 b$ Z( a
printf("\n");% {: D& w' ^* \9 Y* K
}
8 q0 ]) i0 Q" s0 R7 ~7 G' Sbuer(a,h,++z); + D/ A0 m& W8 t6 W) T7 k1 I
}
3 K" h1 w/ j& H2 e4 e- m}
/ c3 X- `: @4 b' @void warshall(int a[N][N][N],int h)# c# B, V" U4 S, _# i
{
9 t' k' V% m+ t E g; a- ]* W9 oint i,j,p,q,r=0,s;- J# J/ |; x8 M' {
for(j=0;j<h;j++); Z. u+ v/ y- s* G o
for(i=0;i<h;i++)
2 P& I( V, a* Rif(i!=j && a[0][i][j]==1) W% [$ J" ^# N1 Y9 }7 @
{
$ H9 i7 u+ f; n% S7 L& qfor(s=0;s<h;s++)5 q* z$ ]* U9 ] Y# v6 v: {
{ ! u% [! n. V0 o
a[0][i][s]=a[0][i][s]+a[0][j][s];) ?2 y1 L! n$ t( ]3 B
if(a[0][i][s]==2)7 G7 ]5 |0 r2 |4 ^1 Y
a[0][i][s]=1;/ h) ~; n% V' D5 r' n% t
}
8 l7 e9 r @9 g' lprintf("\n第%d次运算的结果如下:\n",++r);" V* [. R& J8 |8 [3 c
for(p=0;p<h;p++)+ Y. l5 ?9 {- a4 O6 k& ]
{
6 C0 v5 |8 b$ ]) @for(q=0;q<h;q++)
1 e( N/ `6 w+ l; x2 y8 eprintf(" %d ",a[0][p][q]);
& R P6 k" |$ r' j8 lprintf("\n");- q+ a) A1 a' W' q5 g
}9 g E8 c% @( N. N9 P
}! V2 T7 o5 l( l" r1 y2 p
} |
zan
|