- 在线时间
- 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"
+ z! Y9 C$ ?, d7 `8 |# X7 K* e#include "string.h"# @9 v, u5 Q& x0 v$ a* V
#define N 50 # u$ i% C7 h9 M) v9 w( v
int jisuan(int a[N][N][N],int h,int z,int i,int j);0 \" u) n% h' q- l
void micifang(int a[N][N][N],int h,int t);
- N. [9 f! f- L) Q, |( zvoid buer(int a[N][N][N],int h);0 i+ ?( K7 v t$ m* D
void warshall(int a[N][N][N],int h);$ Z. d; B6 J/ x# G: s6 r
main()
/ w4 o8 l9 a: I$ k, E ?& ~! Q* t+ C{! f6 u8 j2 e$ a! p# ]( A; f7 u# n
int i,h,j,t;
6 y) `0 Q: c3 C% Vint a[N][N][N];
# t/ {5 U; N( d( e9 zprintf("请输入邻接矩阵A的行数(或列数):\n");* Y5 c6 C5 x/ f" H* t4 D# C1 |
scanf("%d",&h);
) C% D" M# A9 e& B7 }/ oprintf("\n请输入邻接矩阵A:\n\n");3 R F% b; E' n. |
for(i=0;i<h;i++)0 {: K$ G9 W) E% `* h9 m
{& ]3 g- d, }8 {& Y- ^
printf("请输入邻接矩阵A的第%d行.\n",i+1);
" k' p; _) r7 r7 O! j$ {! a( kfor(j=0;j<h;j++)
4 _; @9 B' E: X4 N6 Iscanf("%d",&a[0][i][j]); 0 z( ]( O# Q- N' E0 Q$ j
}
1 Z7 C3 z; M6 Uprintf("\n邻接矩阵A为:\n");
! X3 j* S7 O0 K2 d( y+ ] F# ufor(i=0;i<h;i++)" I' K& s8 j) j7 w! G
{
9 Z. }( T! |$ \# U6 j( @$ sfor(j=0;j<h;j++)
) u0 Y) D; }/ O# i6 S. u' Cprintf(" %d ",a[0][i][j]);
* O7 ^2 [& y0 }printf("\n");2 f; i, Q! w# G7 {0 ~% F
}6 C. k) { V# { w# x+ t
printf("\n\n\n算法一:\n");! l/ p; Z3 G& b* n4 y
printf("\n矩阵A的1次方为:\n");$ H& |$ ^5 Q/ g' A* t. | l W
for(i=0;i<h;i++)
* e* W( n( e1 R6 \1 j8 ^{
0 f7 `2 v7 t: J3 M- a0 H! Pfor(j=0;j<h;j++)2 L* E9 }! X' g. V* ?2 X
printf(" %d ",a[0][i][j]);
5 J; d! u u# u$ J' v8 c' I: Vprintf("\n");) g% `& o5 g& x$ w
}, ~2 s! a' S2 ]5 }5 f6 D1 u
micifang(a,h,2);. j8 u- Y# l% I8 k1 v* Z; l& Z
for(i=0;i<h;i++)
$ ?5 y k6 t# P! ofor(j=0;j<h;j++)
0 |7 Z a* O& N( N! i8 sa[h][i][j]=0; //全部赋值为0!
; ?" y& F( A: h3 w; t5 [8 y; { jfor(i=0;i<h;i++)1 t8 ^! f5 T7 s; z
for(j=0;j<h;j++)' Z/ u( t: `8 r5 C: w6 A9 X
for(t=0;t<h;t++)9 y7 w% k* [6 i2 U5 C* n
a[h][i][j]=a[h][i][j]+a[t][i][j];
& V9 B$ d2 `9 n3 ?printf("\n\nB的值如下:\n");
! P/ f6 i4 ^! mfor(i=0;i<h;i++)
2 S& m& A/ h$ m' U{
0 F5 v/ O+ L6 [# gfor(j=0;j<h;j++)
( _9 l4 Q7 G$ f# ]* H) x8 {printf(" %d ",a[h][i][j]);6 @, y7 u7 P% K# V
printf("\n");
5 o) V, l) H- f( R& b}
: [4 U8 j! o0 c( w. J. E, Kprintf("\n\n\n算法二:\n");
4 |; X& ^4 D- Hprintf("\n矩阵A的1次布尔幂次方为:\n");
7 u( O3 e& _7 Kfor(i=0;i<h;i++)9 a- |. z4 G: l! |* U: J
{
- l; d0 _' r$ U5 l% afor(j=0;j<h;j++)/ [& G0 P& o0 X" l
{
) n' E" T! }- J; bif(a[0][i][j]>1) o8 _' _/ Q! T4 z$ W- T: n
a[0][i][j]=1;! q" g( c4 s3 t& l7 J
printf(" %d ",a[0][i][j]);) {! G1 Q" C, Y1 v, A" R
}% ~* _1 n+ X- b+ I$ A
printf("\n");0 \/ U7 g& g5 t ~! k: Y
}; m+ ~. C+ m X6 h/ I3 T
buer(a,h,2);
4 E4 e% \* i2 G) F K$ F& }# cprintf("\n\nP的值如下:\n");
% d) f# ?& I0 a+ [1 O% Qfor(i=0;i<h;i++)
. v3 w; S, v& A( ^{
% r4 u* L2 y& m! B+ F9 }for(j=0;j<h;j++)1 n M6 p' Z; q. E* [6 N" F
{ & M9 y$ r0 O8 w* q
if(a[h][i][j]>1)6 ]: K8 F& J# z) h( L0 i# V; j
a[h][i][j]=1;4 M5 t9 S2 {9 E
printf(" %d ",a[h][i][j]);+ Z+ y6 x N' B
}& E& ^" R, y9 u b5 G
printf("\n");
; C$ D/ h7 w+ a5 i2 f9 b}
* W) [2 k F0 @. d6 W% T3 bprintf("\n\n\nwarshall算法:\n\n");
% x7 J0 u* E6 }# M/ C
+ C3 u2 o2 \" c2 w: p- c& Pfor(i=0;i<h;i++) //处理邻接矩阵A.转化成可达矩阵。# x" Z$ G n/ K; A/ c
for(j=0;j<h;j++)6 z* r# t; `) ^# y
if(a[0][i][j]!=0)
; r' ~. G! w! Y$ [" U$ C1 N) ba[0][i][j]=1;
. e2 T$ N$ z/ _7 q8 D: V/ Cprintf("整理后的可达矩阵为:\n");
' f: F$ p. `3 R7 R9 g6 z$ f8 ofor(i=0;i<h;i++) L% O }# P4 D$ d% A, F% J
{
' w5 A# R+ N% j/ j$ D+ lfor(j=0;j<h;j++)
( F, o+ T' m9 {4 n7 Uprintf(" %d ",a[0][i][j]);
]# d. C* \. F7 O: t/ ~4 ?' fprintf("\n");
" [/ Y; `3 ?' |8 ^6 M1 [6 ~}7 \8 a' l5 Q7 A' G5 f% Z
warshall(a,h);: ^" x( L# Q' F+ F. U
getch();1 u* D) F7 F# H5 h9 `& I0 ^
}
( ]4 O7 J1 M6 A( i" tint jisuan(int a[N][N][N],int h,int z,int i,int j)" j1 K. v# k' y3 z$ p
{
/ ~& r0 u8 O; w& t+ c) T& R! G* l c: Iint s,jg=0;
- `, g- d; v2 Lif(z==2)
0 Z R% _3 }: M( R! z/ pfor(s=0;s<h;s++)8 y4 b6 s3 w* D& g6 B
jg=jg+a[z-2][i][s]*a[z-2][s][j];
+ S3 y# z5 F' c, \+ C9 Lelse
9 P: X5 C3 N2 R `4 bfor(s=0;s<h;s++)
( y0 z% ]. _' _% `' r' _5 N% yjg=jg+a[z-2][i][s]*a[0][s][j];
3 N- G: m5 I/ I c/ X. M( _return jg;
9 ]+ I1 G' s3 e2 E" f) G- D}- O8 ?: M# j* l8 s+ d
void micifang(int a[N][N][N],int h,int t)' r# h9 G) t+ |+ N% y! S! S$ A
{+ Q8 y7 s9 v% |$ S5 S
int i,j,s=0;2 z7 y0 U( l, @" v E7 G0 Z f
int z=t;4 x# U+ y2 D& ~3 } l* N$ D& t
if(z<h) //矩阵的值不全为零。
# K9 W* j( D; F/ v: S$ G% L" a. R- f, P{ 3 b% v% q% q: l
for(i=0;i<h;i++)
; x' v6 Q; C/ c6 T- m: jfor(j=0;j<h;j++)
& W4 c$ h% r+ H: S {a[z-1][i][j]=0; //全部赋值为0!; ?* r/ @3 ^& @ @6 F* H
for(i=0;i<h;i++)
& N4 P6 m" P3 M! f' T# x2 Pfor(j=0;j<h;j++)
$ c- j! r' o) L, j+ ua[z-1][i][j]=jisuan(a,h,z,i,j);
- Y. x) \* t6 {. h5 {$ Kprintf("\n矩阵A的%d次方为:\n",z); c q5 W" o- I0 k2 m- f7 b
for(i=0;i<h;i++) s% Y1 J; U! N; R' V, X2 e8 r
{
. T Z( G7 y! H) [" Y5 cfor(j=0;j<h;j++)( t/ z- k% E5 j; t9 x: R; r6 C
printf(" %d ",a[z-1][i][j]);5 i) F5 L* S6 u- l
printf("\n");
' Z) W; f: [/ ?" R}. e+ o# S9 v/ D: H
micifang(a,h,++z);
" Y+ c5 a- g9 i, e}! q' {* U6 a- T7 |7 O
} S' ~. R8 q/ J4 @1 O. Q l
void buer(int a[N][N][N],int h,int t)2 }: l$ t) W2 ]+ @$ y' M" P: _7 I
{& t- n2 ]3 z; [" {. p7 ?( I
int i,j,s=0;2 N2 u) H. v9 U9 `- f
int z=t;; D* O8 J- E( _. E' t" y1 @
if(z<h) //矩阵的值不全为零。& b. L! Q# V$ a' M
{ : ?6 ~/ z( s8 h' G
for(i=0;i<h;i++)
9 `+ ^. V& b. V, y, I' K+ V, tfor(j=0;j<h;j++)* C* _! w( [$ J& `
a[z-1][i][j]=0; //全部赋值为0!
- z- H4 Z; Z: \% h, t1 y% T7 Y0 D5 m2 }for(i=0;i<h;i++); B0 }2 M4 W H8 U! |3 G+ v
for(j=0;j<h;j++) U0 J" h3 I6 @
a[z-1][i][j]=jisuan(a,h,z,i,j);
! n8 n) X7 s; c4 m4 N4 [printf("\n矩阵A的%d次布尔幂次方为:\n",z);
( _8 b8 u+ e+ [, u0 \# o9 I1 lfor(i=0;i<h;i++)* _- n: O' ?- B9 y6 A* h& R
{
" k( z3 |0 X2 K9 Mfor(j=0;j<h;j++)( d1 Q- T) W5 J( j W, R
{ , [/ ]% y* G- q7 ]* u
if(a[z-1][i][j]>1)
8 n6 h8 r$ e/ W( q& U& I# D. L& A8 aa[z-1][i][j]=1;
; J+ Y I( c& t# uprintf(" %d ",a[z-1][i][j]);
w* _8 r/ g# @4 C' f}
" A- g% v$ D3 B% ?) Y; f/ aprintf("\n");
/ q, J* C( A/ v3 b: `}
& q2 n$ [4 p0 s& H% m K& ?buer(a,h,++z);
2 X) X: } F! a$ I, N}! H, L/ y! ^# L" e# K: I0 V u
}# O% z: z& Y6 i( G2 F* \" I4 A1 v& \
void warshall(int a[N][N][N],int h) F* b% h: t1 a" ]1 v# m
{
r6 g# ?& w0 @int i,j,p,q,r=0,s;
6 d1 z) u7 V$ G- jfor(j=0;j<h;j++)% }( S" M4 ~7 g: g5 O/ Z6 P( V
for(i=0;i<h;i++), l! m) Z' Z, _
if(i!=j && a[0][i][j]==1)
! u6 _; Q$ [, o0 q! d/ L! [{
! C, S; X" O; z7 dfor(s=0;s<h;s++)
' x- L8 a9 _" C# P* `& o{
* ^% f; Q2 ?+ J) Z$ @a[0][i][s]=a[0][i][s]+a[0][j][s];( i: J+ F! j5 N ~8 F6 N( C# f. o
if(a[0][i][s]==2)
D" k$ P& \- l' q# u/ p2 f0 Ra[0][i][s]=1;" d4 l% \ x" t% V
}
0 w, @7 z7 W- Q' V7 nprintf("\n第%d次运算的结果如下:\n",++r);# c7 j; T5 } c7 ]
for(p=0;p<h;p++)! Z0 ?- v* e% A0 k
{+ I% z- K; D& ], }9 t- b7 J
for(q=0;q<h;q++)
( d2 [/ h' @ O# q" i! J0 L. x) j6 Cprintf(" %d ",a[0][p][q]);) J# `" X0 M9 @4 _6 v3 P P
printf("\n");2 Q7 U I3 ?2 X4 C) J0 v
}1 e1 J; _8 F* ^/ C0 \% k `" N& j
}- `. x$ {" x: z' @" p1 x' W
} |
zan
|