- 在线时间
- 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") [! H0 ~0 C. _
#include "string.h"
# Z! k9 E) ^, \! s#define N 50
8 \1 K0 [, i6 wint jisuan(int a[N][N][N],int h,int z,int i,int j);
( n, f2 C- W- J: R( gvoid micifang(int a[N][N][N],int h,int t);1 J1 U8 P; V( H6 r( C
void buer(int a[N][N][N],int h);6 x* O1 Z$ S) c8 \# S% B9 A
void warshall(int a[N][N][N],int h);
0 d9 Q" I( `. ~$ @; r% Z% fmain()
: B3 ?$ m% y' R; O+ Q{
% d' M8 M3 K( i) x }( `# L* ?+ e/ xint i,h,j,t;8 p7 [" S4 W& ]
int a[N][N][N];" r5 L& G5 D0 b3 D% E/ Z, j
printf("请输入邻接矩阵A的行数(或列数):\n");
- j$ P V* L. H) k8 w# `) R Iscanf("%d",&h);; M- n9 B! E8 Z! j+ q
printf("\n请输入邻接矩阵A:\n\n");
" t3 p" O) n1 \$ _1 Vfor(i=0;i<h;i++)+ }# h" U. |" ?, }) k
{
2 Y( }, _) Q" y- e* X4 Aprintf("请输入邻接矩阵A的第%d行.\n",i+1);$ e: _5 K+ _; T' {
for(j=0;j<h;j++): f2 C5 Z( k7 I8 x" w; Q! r
scanf("%d",&a[0][i][j]);
% v6 Q. `1 R: f2 B( T( x}
8 F! G- u4 g& {( [& Sprintf("\n邻接矩阵A为:\n"); m0 a& `( J! L- U8 ^, J8 a1 g
for(i=0;i<h;i++) j& Z) q6 G4 b' a8 i
{% C7 X z" @2 W+ t) x2 \1 h" S7 L7 @
for(j=0;j<h;j++)! l8 Q! \5 |8 x- C' E$ l! _, F) J
printf(" %d ",a[0][i][j]);- K5 c& A' p }, g
printf("\n");
+ y1 e: ~* d; W4 e _7 i$ D}
$ V! @5 J+ v! K2 X6 l* c9 sprintf("\n\n\n算法一:\n");2 o# L2 a6 T9 z& X$ L. \
printf("\n矩阵A的1次方为:\n");
: s b, k! P) F4 ]$ Hfor(i=0;i<h;i++)
3 m4 ]0 k+ ?7 j- J- }! [{' c0 M% }' ~/ i# ?& b: d
for(j=0;j<h;j++)
, o5 p( l. [% a8 U6 Q" Fprintf(" %d ",a[0][i][j]);! y% K, S$ I" P# E" U
printf("\n");8 z! l5 M4 o. }8 K# a. n- Z
}: a; Y3 C! Z! Y/ F
micifang(a,h,2);6 Q2 n3 T& U* }& {/ T8 g
for(i=0;i<h;i++): M$ u1 E4 t! ~' q! \
for(j=0;j<h;j++)
7 {7 v$ W8 a6 i4 Q, C# X* [% b$ \! oa[h][i][j]=0; //全部赋值为0!* c# U0 @: {) k- Q$ g
for(i=0;i<h;i++)- R1 s, a" O4 I
for(j=0;j<h;j++)
3 |5 M* e$ t; \8 h4 y+ ffor(t=0;t<h;t++)
" ?% U4 O% u1 Ca[h][i][j]=a[h][i][j]+a[t][i][j];
7 [' @; d9 |* i# aprintf("\n\nB的值如下:\n");/ S f+ [$ T; A- E" ?) D8 @ }
for(i=0;i<h;i++)
& Z# q! W+ J, i# ~/ S3 U8 N{
, q! d, Y1 Z+ Cfor(j=0;j<h;j++)
* u; W. J- T8 w: _printf(" %d ",a[h][i][j]);
5 {+ z. b$ y: R5 o" y- Pprintf("\n");8 |+ V2 v/ L/ D* i
}- {7 _1 a) E: x5 u4 k. z. |' G
printf("\n\n\n算法二:\n");5 ]- X, }* N- }: w9 d6 N7 C5 q
printf("\n矩阵A的1次布尔幂次方为:\n");
: t4 X! i. ~- X+ u: Q' hfor(i=0;i<h;i++)
- f- G' w( z' r{3 `- w/ o+ L; P8 q. d
for(j=0;j<h;j++)
/ M2 Y- F1 X3 ~% h0 B- e2 {; _{2 l1 O7 w+ O/ ]6 Q$ P) L( v* l9 D" T" g
if(a[0][i][j]>1)( R6 @/ D3 G" M: S! _
a[0][i][j]=1;
9 _9 K. }1 _% b4 b' p+ g; W# D) Bprintf(" %d ",a[0][i][j]);
- n/ b u9 a5 ?; _& t& A}3 Q6 A% L! \" e! ~& d
printf("\n");4 ?* T9 O, l5 G# D0 V% I, A
}
1 g2 d" [+ f, y( w: t8 o: Tbuer(a,h,2);" H8 E# ], G) L& q) ]6 x7 d8 E7 w. M
printf("\n\nP的值如下:\n");
Z1 ?% _9 P: _) d' l Wfor(i=0;i<h;i++): _1 T w; B j& n" k) E
{8 G' G, f, J/ H
for(j=0;j<h;j++)4 a( A! Z$ G) K$ `1 Y* [
{
R4 \8 E: K! A2 Dif(a[h][i][j]>1)# B/ G6 B. o% d4 Q
a[h][i][j]=1;
1 ^) C( V& v* _& lprintf(" %d ",a[h][i][j]);
: M; n9 ?- l1 O}
; w% z" |: m2 N6 `printf("\n");
0 g6 F9 S7 W: h}
% _+ T3 D( w2 P% W) xprintf("\n\n\nwarshall算法:\n\n");
, I4 l5 B7 b- u: \9 Q9 S4 E8 O8 N' y+ y, ]3 r7 H- @
for(i=0;i<h;i++) //处理邻接矩阵A.转化成可达矩阵。1 d" n% Y9 p8 S7 m- c) m
for(j=0;j<h;j++)
( L7 J3 R; U& h5 K L' q, Cif(a[0][i][j]!=0)
! J. @+ L: |; B2 La[0][i][j]=1;
9 h* r/ U( g, B! V3 w% `# W+ iprintf("整理后的可达矩阵为:\n");/ f. K! a( C) X" h, B
for(i=0;i<h;i++)- ~) \$ \8 q% m* Q9 y* I" s9 D
{
& |! r- g1 h5 Y, R2 n v5 Vfor(j=0;j<h;j++); K! t7 o: V' c c$ K
printf(" %d ",a[0][i][j]);
7 ]% E+ R1 ]7 X: V- Y( ]- {printf("\n");
1 m3 o' k; ]" M+ J% _, y- w8 I}
* O& e- Q; F# O! S% v/ h/ i, owarshall(a,h);
3 }5 V0 B! y3 i, M1 b* qgetch();
: ~ a% Q2 ?1 @& w, r}
, }3 K1 A2 P/ q* E+ m" k1 B, K/ z, |int jisuan(int a[N][N][N],int h,int z,int i,int j)& e9 w; f' F: _' o, n. z/ \( A8 k
{4 [6 @# A, c; x' `$ E* w1 Z
int s,jg=0;* I& r. Y- J5 ]7 e4 T: W
if(z==2)
/ T; b' }7 {5 ?3 O+ [+ hfor(s=0;s<h;s++)# Q% }* X3 N7 p3 W& a
jg=jg+a[z-2][i][s]*a[z-2][s][j];
% k! N& ^7 i1 J2 felse , | k- i0 R# s9 u: b7 w6 [
for(s=0;s<h;s++)2 E8 g! P9 a# D: G# y& E5 U& i+ u& e
jg=jg+a[z-2][i][s]*a[0][s][j];
2 V3 \! E# t h# ?return jg; ( J3 u+ }, Z; L" b3 N/ @
}9 Q) q, u3 e! ?( @$ Y6 O
void micifang(int a[N][N][N],int h,int t)- ~$ F# u e- C$ b8 V, Y, d* _
{
/ \# |, ^ E }0 ~int i,j,s=0;: I$ Z# O0 k- \) I7 a
int z=t;
) L) W4 Y. Y( e4 j' h3 cif(z<h) //矩阵的值不全为零。
# S5 S; B' C* X. J) V9 T: N7 f: L8 [{ % C2 R! h. k3 o6 k0 l
for(i=0;i<h;i++), s% d2 b& U# n& i' c
for(j=0;j<h;j++)
; J% f; `( {; \' f, @; g- w& Y- d9 Sa[z-1][i][j]=0; //全部赋值为0!
% W7 D" C5 _$ }4 j6 ^7 h5 jfor(i=0;i<h;i++)1 P' X- c' \& N# V5 c! d
for(j=0;j<h;j++)
, }& b3 R: r2 J" w4 a1 `a[z-1][i][j]=jisuan(a,h,z,i,j);
) l' n7 C8 Q/ Uprintf("\n矩阵A的%d次方为:\n",z);
# j7 V. S/ R, m+ O) V5 Ifor(i=0;i<h;i++)
9 z& ^3 H. i2 N+ f) M{
( m: u9 y3 n1 ?, ?1 H* Kfor(j=0;j<h;j++)7 U5 [# W9 e( X2 j
printf(" %d ",a[z-1][i][j]);9 X" `3 M, z8 t, O5 i6 x; ]/ s
printf("\n");
* H6 H w1 p) |* n* ^4 N" q2 Y}- r- u3 W( M9 w6 a5 f, Z
micifang(a,h,++z); " T' _! J9 B( x+ Y1 U4 x
}
4 ^( I6 I% B/ v* Y}
8 y/ ~. X, D6 e* _& K+ I" | u6 ~) {void buer(int a[N][N][N],int h,int t)
5 g) x% N p: R. ?' X6 b. Q{
! {$ U: k6 J# f: |int i,j,s=0;1 j6 p# n& R1 ?
int z=t;' o4 ^/ u) ^. S) D- J- b; Y
if(z<h) //矩阵的值不全为零。
+ M! V8 b% Y1 N{
2 J5 G- g1 M$ @. Z* Jfor(i=0;i<h;i++)+ R$ Y( M, O/ E3 t8 C
for(j=0;j<h;j++), o# [) c# k/ ?6 ?$ N# ?+ V+ k
a[z-1][i][j]=0; //全部赋值为0!
; o8 V9 |) ]+ l8 \7 [$ pfor(i=0;i<h;i++)! ]. _0 f2 ?' z$ Q5 N" S5 i. \
for(j=0;j<h;j++)
8 U* d8 _' a5 N Ka[z-1][i][j]=jisuan(a,h,z,i,j);
4 J+ |5 h/ u$ N( cprintf("\n矩阵A的%d次布尔幂次方为:\n",z);8 x& N% r5 P z8 v8 ^0 ?2 a
for(i=0;i<h;i++)2 D, v* Q5 X9 o6 _$ d
{
, h+ @, S7 K$ j+ T2 h( i7 I) pfor(j=0;j<h;j++)' \& g# e* s" w4 S9 \3 u$ C! F
{ , m B( Z2 o6 B+ k
if(a[z-1][i][j]>1)0 `8 B: `% Y8 E4 X" n, i6 O
a[z-1][i][j]=1;
U/ t* s1 k8 s/ i: n1 }1 rprintf(" %d ",a[z-1][i][j]);
7 M% T1 X( }1 r* A c5 R}0 \2 b; a/ `+ p3 J* h- T7 x/ @
printf("\n");: Y' m5 q' M$ I$ I: J6 @% U
}, i. m# _+ Q3 ]
buer(a,h,++z);
' G" C# J- l* m& m' h' [6 \}
! E0 ]6 p8 I3 ~+ L: T}8 n8 o9 q8 f# q7 `
void warshall(int a[N][N][N],int h)
3 l% q( Y2 F( C7 l' a0 w{
% k/ y% P8 `( i8 @+ v5 H/ l3 o3 vint i,j,p,q,r=0,s;
1 {& x5 ]3 y9 jfor(j=0;j<h;j++)0 o" n3 L3 E2 T* \1 e( l
for(i=0;i<h;i++)
; K% I/ A$ P+ ]) D) O2 @if(i!=j && a[0][i][j]==1)
7 a T) ~9 p# V2 X6 k{
/ c- d9 o1 F/ p2 `$ |/ nfor(s=0;s<h;s++)5 b9 K4 ~) M: P) Z
{
6 N7 _, t3 h' H# ya[0][i][s]=a[0][i][s]+a[0][j][s];
R9 Z' N! r) R. qif(a[0][i][s]==2)5 A! r9 |+ x) R. U7 }$ R( ?2 b9 U. P- E
a[0][i][s]=1;1 z3 V0 C) h2 t7 R# J) o
} & D% {, O1 k+ {5 W: `
printf("\n第%d次运算的结果如下:\n",++r);
! N# n6 _: S N4 i# m1 L1 ]# C+ Afor(p=0;p<h;p++): h7 {9 G% w" y! @
{( X) A1 n5 m9 N |) `3 H/ K* m
for(q=0;q<h;q++)8 {0 n3 k5 N$ r+ O4 @1 z' m
printf(" %d ",a[0][p][q]);
& D1 Q, T% w& B3 D* A: Sprintf("\n");
/ K/ f7 ]- T- i: \: R}8 h5 H* t" d0 y* Z% V' p2 y. {
}
k5 c: H; S! x. I9 c8 D6 I} |
zan
|