- 在线时间
- 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"/ L' ? I6 G! [0 n
#include "string.h"9 l. n% y; E: o: ^+ a4 v' J
#define N 50 $ @* T' h! \8 ]# |8 c; \/ t
int jisuan(int a[N][N][N],int h,int z,int i,int j);
6 W# V7 A# O% Fvoid micifang(int a[N][N][N],int h,int t);: I& }% z5 g) g; h7 X" m# Y- x5 P
void buer(int a[N][N][N],int h);9 _8 T6 W+ m& d) n# d2 e% l
void warshall(int a[N][N][N],int h);7 |9 z9 W1 `" y* D6 j8 u2 D
main()
* `3 H* p. O/ R9 p! |4 N, V* g i{' N/ G' d2 Q4 h
int i,h,j,t;
, z9 u5 i4 O( g* Z0 fint a[N][N][N];
9 T( Z/ P+ d3 L- Y! Yprintf("请输入邻接矩阵A的行数(或列数):\n");5 B& g0 J. w& z/ K% P9 P1 k
scanf("%d",&h);
# k' ^' X$ D5 f+ F! Jprintf("\n请输入邻接矩阵A:\n\n");
: W) @/ Y( }; d: w$ }2 \for(i=0;i<h;i++)1 y. U9 x& u+ E6 C4 B, V% p0 N5 v
{
- B3 A* N6 E) Q+ X6 I- Q+ B% e8 K" dprintf("请输入邻接矩阵A的第%d行.\n",i+1);+ ?& w5 T: c3 h# z. X' S
for(j=0;j<h;j++): d3 @* T, a# `5 c, r
scanf("%d",&a[0][i][j]);
- D8 S; P3 J6 F; T6 `}, C9 c5 n5 p) d2 h3 B' C5 y) y
printf("\n邻接矩阵A为:\n");
7 ^$ \2 x5 [5 o8 d+ _( I% U+ N8 ofor(i=0;i<h;i++)8 r& M' x+ ?3 d# o; G% c6 s
{+ y8 P% X7 r' l4 B" s
for(j=0;j<h;j++)0 F7 q. _9 p( {6 V- ~7 h. V
printf(" %d ",a[0][i][j]);' G, X% _2 U# q; U" M
printf("\n");
+ ]1 u" L: D+ j}
$ ?$ z! T t$ k3 Aprintf("\n\n\n算法一:\n");
: W+ y' R, `2 l: rprintf("\n矩阵A的1次方为:\n");
1 N+ e5 }# ?8 f2 Sfor(i=0;i<h;i++)0 I" h* R9 s" r. ?6 m' E
{2 q9 U( E! o/ u1 V+ i' D# o4 P
for(j=0;j<h;j++)/ @5 T7 Q* z% ?9 s2 m, |! _0 ~
printf(" %d ",a[0][i][j]);1 C& T: F. W5 ` R/ {+ X) R" i' T
printf("\n");
9 M7 e ^4 n" P3 |5 d0 W8 r}
1 W1 P. E$ m x1 }/ S+ U2 l5 mmicifang(a,h,2);: S j7 o* r# Y+ r5 w
for(i=0;i<h;i++)
5 G' e+ L/ o" f. r. ?# {for(j=0;j<h;j++)7 O5 [5 h0 V% q, m5 m" s+ _; [ _
a[h][i][j]=0; //全部赋值为0!1 k0 L) h% E5 J: V
for(i=0;i<h;i++)' V. W4 P, J4 t8 A
for(j=0;j<h;j++)% K; ~5 I& u: z' O- M9 q: t
for(t=0;t<h;t++)& o4 W% A+ C/ O# o. N, f, C! {
a[h][i][j]=a[h][i][j]+a[t][i][j];
, ~" q+ r ^: m1 V8 a: @/ Sprintf("\n\nB的值如下:\n");
/ y% q5 x8 ]: ^8 q j- t6 N& l" dfor(i=0;i<h;i++)
4 q3 m t, K! [# ^6 ~, f{
6 |7 d; V' p! |2 q( Ifor(j=0;j<h;j++)
$ z; [- ?9 p+ Cprintf(" %d ",a[h][i][j]);( o" R6 I; D' [' ]
printf("\n");
0 H: \6 f J2 m( ?* H8 F4 `. W# S}
! N; @2 t) z! t bprintf("\n\n\n算法二:\n");
: C4 s% _. x" c1 p9 M) gprintf("\n矩阵A的1次布尔幂次方为:\n");8 i T# |# E' D5 C; S' T
for(i=0;i<h;i++)
5 G! W2 R* U9 a{
. Y C; F- H, K7 f, i: Cfor(j=0;j<h;j++)* d- e( \6 Q+ M% ]" j% x
{
: @$ d. j, r3 D& Y6 Gif(a[0][i][j]>1)
y' B3 ?! a: U5 ~) Xa[0][i][j]=1;1 `! t9 i: @6 ^9 H+ L9 Y+ w
printf(" %d ",a[0][i][j]);8 G" [6 M: E9 |- A6 [$ L" Q
}
& l! P# X% P2 Rprintf("\n");5 j3 n2 {+ I4 b: V; y
}
* J) r" m/ `& G! P1 J9 ]2 _0 rbuer(a,h,2);# w# k% N( w, g1 i- }- i2 m& N
printf("\n\nP的值如下:\n"); Y$ |" l6 l+ T4 ^" P- k7 d7 [
for(i=0;i<h;i++)+ U' h& O3 x4 g8 U& F& ^+ c
{
* S7 C% R( m4 c3 @& [' ]/ hfor(j=0;j<h;j++)
0 T7 y) C8 Z6 `{
5 s- O! F% V3 b7 ]7 z& eif(a[h][i][j]>1)
- a) `: g/ V8 d( ?$ n# `a[h][i][j]=1;# X) ]$ l$ W3 u) o! P
printf(" %d ",a[h][i][j]);% m! ^3 n! M1 x% J; ~9 A( v
}5 r, H" A/ t+ k0 U9 H
printf("\n");$ x: g/ |6 u5 T* Q% m
}
7 T! a3 o0 u$ r: T O5 x1 ?4 Uprintf("\n\n\nwarshall算法:\n\n");
( U& t& ]* F4 z4 v Y# M! f! s9 i/ l# i3 ]* c
for(i=0;i<h;i++) //处理邻接矩阵A.转化成可达矩阵。
& g1 M* B5 o$ b% ofor(j=0;j<h;j++)' z" _/ Z, M+ l+ U9 ~- m
if(a[0][i][j]!=0)
& l6 P; O3 }, S7 `3 Ca[0][i][j]=1;
$ ^8 N) O, h, h" Bprintf("整理后的可达矩阵为:\n");
8 \& I7 |* \, X5 T( z+ o7 j: {for(i=0;i<h;i++)
5 O; J3 J Z, j' i& t{- {% Q9 Y+ N9 c# F* T
for(j=0;j<h;j++)
6 c- r% X v; h4 ~8 ?printf(" %d ",a[0][i][j]);
- V3 j+ J* r8 ?1 ]& b; Iprintf("\n");! m7 T4 C5 e( ]+ n6 z; @: e/ ?' K
}2 E2 \4 y g" h' T- a: ?: s2 l
warshall(a,h);( ~% n* V# }/ M& C" l0 n
getch();
5 ~9 i! W k; e& U}
* p+ D+ ~& _; [% @' x( N: g3 @int jisuan(int a[N][N][N],int h,int z,int i,int j)
! ]+ t E' L1 |7 T6 u: w2 U' s{
L9 T( u ]' o! ?0 g/ Q6 l$ aint s,jg=0;: U" ?9 ]" `( k: ?9 }
if(z==2)
& u$ J6 z# H/ F: n& n2 gfor(s=0;s<h;s++)0 J m2 X2 e' G3 f N/ w2 D9 ^* k
jg=jg+a[z-2][i][s]*a[z-2][s][j];
) _! f) A: v# B6 A$ b5 pelse
; S% h) }; }! h- N/ J9 R5 \for(s=0;s<h;s++)9 O4 X: X3 t" M: a9 F5 I7 ], t
jg=jg+a[z-2][i][s]*a[0][s][j];( O& G/ Z! ^# x+ K, u5 V
return jg;
1 [2 M/ e# k" \( _1 ]9 U! u% v}' P. A( _" Q1 a
void micifang(int a[N][N][N],int h,int t)
3 i; }) M3 Y# I3 I( m" Y{
2 x7 S8 k3 ^% B$ C fint i,j,s=0;
4 w8 I; \% |' [/ }; o2 U, V6 b' V$ Wint z=t;4 }5 G+ S: P6 G6 d( ~
if(z<h) //矩阵的值不全为零。
" B1 s6 `! C6 r- P" F% u7 b{ * e7 k1 M7 r9 T) G7 M1 ~
for(i=0;i<h;i++)
& [9 f( p W$ D. H7 hfor(j=0;j<h;j++); ]: {+ e( n& _, e* n9 q4 o$ W
a[z-1][i][j]=0; //全部赋值为0!" r$ h" g) s! a
for(i=0;i<h;i++)
2 n2 o2 g$ ?9 ^, @$ {for(j=0;j<h;j++)
: Q. [5 |+ z7 e Qa[z-1][i][j]=jisuan(a,h,z,i,j);% X' E9 S% G: n! a* k2 C- m
printf("\n矩阵A的%d次方为:\n",z);0 |' V& H9 V. Y% Q3 I n
for(i=0;i<h;i++)8 C1 t" O( o: g8 A2 h
{9 {" u6 O- ~. z& n, s4 B& c) b9 Q
for(j=0;j<h;j++)% Y) }6 Z" O. I' ~( \4 |
printf(" %d ",a[z-1][i][j]);2 g! T0 ], x$ m$ v/ n6 o6 i
printf("\n");
6 c% t9 }. B9 @% a}2 F/ u2 K y$ |/ g0 O! B: x
micifang(a,h,++z); - n4 I. H% T$ H$ X6 A ~# h
}
$ q" d: B; b( ]' i; O" R( K% E- i} t1 P" [5 L6 T& F3 q ?
void buer(int a[N][N][N],int h,int t)* @* [: {6 b2 B) |# i
{
- F6 d% i; G5 J9 d& eint i,j,s=0;4 p( u1 H5 { v. F: v
int z=t;
2 U5 w/ G3 q) W+ A8 ?# K( v4 |if(z<h) //矩阵的值不全为零。
" i2 ?+ v; c. ~6 ~ P; p6 f7 Y{ ( T( V7 U* R/ h" \8 `) F
for(i=0;i<h;i++), y& z5 h9 o/ Y
for(j=0;j<h;j++)1 P' r" a' J4 s0 o
a[z-1][i][j]=0; //全部赋值为0!
8 R" ]) D( ~+ n2 \# U. Kfor(i=0;i<h;i++)8 d5 o" r" n/ o L
for(j=0;j<h;j++)# p1 Z2 J# t: d5 E: l+ D
a[z-1][i][j]=jisuan(a,h,z,i,j);
) |: l# L! n. T, V1 t1 T4 Oprintf("\n矩阵A的%d次布尔幂次方为:\n",z);
4 }' ]9 W3 Y) ~- Xfor(i=0;i<h;i++)
( `4 ]3 l6 o' d( S- |+ y+ y+ N{2 E S. S& y" Z) l
for(j=0;j<h;j++)' w8 B. {, ^9 t0 j8 i% B. N
{
+ E2 e \0 A/ r& iif(a[z-1][i][j]>1)
8 n: c" Y( M0 E" w) J1 Q5 Da[z-1][i][j]=1;
$ k1 n2 H( m+ |7 C, a5 l0 T0 yprintf(" %d ",a[z-1][i][j]);
: _. { m" c, H: F/ l6 t}" C) \8 Y, f* Z6 Q' B( B5 U
printf("\n");1 a0 j- E3 I+ K ^/ f p5 |
}7 y( l3 R' |- C' P4 R- q. \/ y
buer(a,h,++z); 3 `+ ]! Z; _& d- B" q
}
% i7 ?( u2 O& U7 b( Z% Z; ^. w}
; L- Y6 M) A* s' q1 Y! N$ v) Svoid warshall(int a[N][N][N],int h)% E7 N S% R# C
{0 b1 V, T+ ?7 G' a/ v
int i,j,p,q,r=0,s;
( X- s( j- t/ Cfor(j=0;j<h;j++)
! h0 c% z8 w! w- D) P" a% F/ Wfor(i=0;i<h;i++)- ]1 @. y# d' |) z4 m4 s6 n. @
if(i!=j && a[0][i][j]==1)6 d8 r6 w5 {: D, P
{0 Y! v2 z9 U8 u9 p
for(s=0;s<h;s++)
# j# @5 @6 w \{
4 {9 z1 w1 T8 E* ]9 ^a[0][i][s]=a[0][i][s]+a[0][j][s];
+ p5 |& M! C7 q5 D/ G) w7 n" q: C8 |if(a[0][i][s]==2)) u$ U( l% N; M
a[0][i][s]=1;) ^% R' d( l) j( y2 b( g* I
} 7 t! k5 S" S/ E* w* P( m# x
printf("\n第%d次运算的结果如下:\n",++r);
. C: k( J, I2 f8 Ofor(p=0;p<h;p++)% k3 b0 R: G: O' ^
{! e7 |# t6 T: J. o8 F) p
for(q=0;q<h;q++)- z7 U) L1 o0 O; {2 N) J$ i
printf(" %d ",a[0][p][q]);+ n- J: N$ i9 g) r
printf("\n");
. v; S, x+ T) m C G}
. \: @6 r/ K; R: G) p# Y}' L! L b5 J' l [$ L3 F
} |
zan
|