- 在线时间
- 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"* `; @4 r6 X& V
#include "string.h"
/ L# b5 R$ U( ^( Z, d#define N 50
& | D+ z" J( L+ P& zint jisuan(int a[N][N][N],int h,int z,int i,int j);% \3 m, s" c! _9 `/ |
void micifang(int a[N][N][N],int h,int t);
) q; C, I9 O1 W$ Z$ y" mvoid buer(int a[N][N][N],int h);$ f3 s* C2 L: W! B q2 C) g; M
void warshall(int a[N][N][N],int h);
4 l5 K s8 D' u4 n# }2 ]* hmain()! j' x2 `& o' V* B0 [1 s
{
3 Q) V1 M. ^& d0 Jint i,h,j,t;' F' Q* ^ L* f" l% s
int a[N][N][N];4 Y+ t V4 V# H& |9 J/ F
printf("请输入邻接矩阵A的行数(或列数):\n");5 B; Y# K" h5 X, x/ y) s
scanf("%d",&h);5 A' u0 R) w- s% r! K. p( d) `
printf("\n请输入邻接矩阵A:\n\n");
; R; Y$ {) u G- E: Bfor(i=0;i<h;i++)
: f/ F7 S0 o! L{8 x) l* b4 l* ~% A; r
printf("请输入邻接矩阵A的第%d行.\n",i+1);$ |2 {+ m; X" x- P5 X# J1 @& y y
for(j=0;j<h;j++)9 Y) c( N% a5 M- q$ D
scanf("%d",&a[0][i][j]);
' R6 q7 e% `- l+ c" k! G p! a/ r- u}6 H6 o* T" C% O( @5 T( ?0 v
printf("\n邻接矩阵A为:\n");8 u% O2 T/ g* N
for(i=0;i<h;i++)7 S2 ^/ f8 M+ Y# `9 Z, o. _& F
{
) _. b- H+ `1 ], |3 Y5 ?% tfor(j=0;j<h;j++)7 e4 M9 S5 X+ r6 S5 W% b
printf(" %d ",a[0][i][j]);4 l/ t$ O/ \: Z* R! f
printf("\n");) w% c$ o7 M5 W, ~" w9 C
}4 U! b3 }, P1 q- v {5 ?& ]6 @
printf("\n\n\n算法一:\n");/ C4 g& u( i/ f, o+ y
printf("\n矩阵A的1次方为:\n");8 F2 r$ d z( O& z$ W( H5 E' q
for(i=0;i<h;i++)* t! {' C( \2 P4 N! H4 s4 D5 ~
{
2 C) z- K, e% K4 X5 yfor(j=0;j<h;j++)
" s% d; v: G" j+ t1 tprintf(" %d ",a[0][i][j]);8 v: y$ b m' \0 ]
printf("\n");) r) u! h3 r( K: v. B, K% C* \9 c
}. L; X% b! [% j
micifang(a,h,2);( d( I7 e* S8 v8 P6 c3 H
for(i=0;i<h;i++)2 Q/ K1 }; X# v
for(j=0;j<h;j++)
' u' k$ ?8 e. {5 @& R. J! V+ A& ya[h][i][j]=0; //全部赋值为0!2 ?$ o) G' w+ p
for(i=0;i<h;i++) o0 _. i- _& K
for(j=0;j<h;j++)
1 x" Z" V q8 X2 n E# g; @for(t=0;t<h;t++)
- G6 V5 \, Y$ Z" ~& H) X5 A! za[h][i][j]=a[h][i][j]+a[t][i][j];! o* `$ D. m" B1 K) P
printf("\n\nB的值如下:\n");2 c& b' [) h# ?* @$ v' T
for(i=0;i<h;i++)
% Q( P _! S* s& c5 z# u( _: _+ G{
7 Y5 r8 b8 _! e$ ^for(j=0;j<h;j++)
) x* y( j/ \( |' r7 a+ L1 Q: uprintf(" %d ",a[h][i][j]);
: _9 j C: @4 U6 Gprintf("\n");' X' B* \+ e9 Q# n, w4 a" F( C
}2 i9 }( X" e& q% {* u l& f% Z
printf("\n\n\n算法二:\n");: r9 R6 e$ H* U/ ~/ |, {4 q
printf("\n矩阵A的1次布尔幂次方为:\n");
2 y4 `" J7 O+ x. R$ Y* G8 Ifor(i=0;i<h;i++)
; z+ q; `" t! m{! t' B2 v- X5 Y9 n/ L o
for(j=0;j<h;j++)
: p, G5 h& i1 u5 o! V* w$ [. l{- ?0 B. U; H% O4 d
if(a[0][i][j]>1)
, D) F5 b. v0 x; ~1 \ Ea[0][i][j]=1;3 A, T( \, y* `2 b1 L3 I
printf(" %d ",a[0][i][j]);
5 f) ]! T1 R9 V& W}
' ]1 b, z* U! u( l# B3 m6 Rprintf("\n");
; E! z, s4 O. w4 s% `} N8 X; D, x4 w, K8 `8 d
buer(a,h,2);2 E# Q+ a( W! e* E3 e: B
printf("\n\nP的值如下:\n");( f4 Z8 |/ E5 a5 C7 Y
for(i=0;i<h;i++), W5 O R. @2 H: M2 ^
{
2 X3 \3 }9 y) r2 ]4 J2 A8 Tfor(j=0;j<h;j++)0 d3 b' m$ P5 N1 X! l
{
: p# a7 e! f* {' y) v9 c& a- \if(a[h][i][j]>1)
3 o: ?5 }3 f. ?4 b& [5 T* Xa[h][i][j]=1;. `) G/ [% L4 H8 {! ^$ I4 w1 J
printf(" %d ",a[h][i][j]);# V2 G0 }) q; c3 j! ^3 O9 R- f$ I; }
}* r- E# K @/ B. B
printf("\n");
7 s1 I2 |/ O- b+ G}
+ `" X8 {. P+ u9 D/ q! P- e. qprintf("\n\n\nwarshall算法:\n\n");
1 ^7 T$ p7 n6 k* }5 l" y. a4 @
; g! A) `, D" k0 z' p+ z2 T7 nfor(i=0;i<h;i++) //处理邻接矩阵A.转化成可达矩阵。2 ^! ]1 I5 j, c* k% B
for(j=0;j<h;j++)' W6 M& U7 h! s' j: b: r3 V8 T
if(a[0][i][j]!=0)6 R9 m" B' c! w8 ~
a[0][i][j]=1;
7 C! b, ]- l' G, i. o8 pprintf("整理后的可达矩阵为:\n");
. U, t& }0 B u U. `for(i=0;i<h;i++)
4 l% ~$ p1 n/ y3 Y1 [- _{
2 k' H/ Y: c2 r2 p; Jfor(j=0;j<h;j++)
1 G7 N2 s/ l7 Y4 I! a; dprintf(" %d ",a[0][i][j]);- l0 i7 m1 L1 x
printf("\n");% p0 n" H7 R3 l4 P" s! k
}# j8 f8 u9 O; Q0 x
warshall(a,h);
$ n& V$ _& H c ~& Egetch();4 Y; G# e; _" K+ b5 ?
}8 b, ^6 U+ q! ?. M
int jisuan(int a[N][N][N],int h,int z,int i,int j)
/ l" `( ^2 `% m5 W+ C{3 w: T% a; T; W( K
int s,jg=0;* F- |& N+ `7 b" k5 P) y- B' G9 l6 n
if(z==2)
" H9 n# Y2 t0 x0 \ t2 qfor(s=0;s<h;s++)
7 Q. C5 ~9 S( s" d2 h/ ^7 wjg=jg+a[z-2][i][s]*a[z-2][s][j];- o" W' X. I+ R9 i
else ! Z! o; O2 r' l# {
for(s=0;s<h;s++)
9 a _. @# U5 U/ Vjg=jg+a[z-2][i][s]*a[0][s][j];
, u9 W* ^0 {; A7 Vreturn jg; 0 \5 A0 P8 ~$ e' `
}
" Q6 I4 l+ t7 u8 _) y4 Kvoid micifang(int a[N][N][N],int h,int t)5 P) v( H5 I9 L5 _9 X' B+ n0 K
{
0 I% d! M4 J: `1 p. oint i,j,s=0;
2 @7 C4 b7 m6 u' p K' [& e @, S6 Aint z=t;+ k& ^2 Y y! k) r
if(z<h) //矩阵的值不全为零。 ^' z/ a* m7 }9 q2 C
{
) ~/ _1 ]5 K/ S- |& h/ ~8 W1 pfor(i=0;i<h;i++)$ g B( h9 l* C- J, Q8 U
for(j=0;j<h;j++)
% l0 _( |* X+ @: K' ?) E Ja[z-1][i][j]=0; //全部赋值为0!' z9 d2 d& {6 b/ w
for(i=0;i<h;i++)
/ N/ _2 ~4 a( J+ zfor(j=0;j<h;j++)
s" c6 C0 Q: @1 `/ v) w+ X! Ea[z-1][i][j]=jisuan(a,h,z,i,j);
" j/ z v# G: W( ]' Y4 xprintf("\n矩阵A的%d次方为:\n",z);
# }* Q; k8 K3 O: W1 V0 `for(i=0;i<h;i++)
0 O, z+ }( z) F- t9 W& Y9 v{
* a! |9 F" `/ N: o# S4 M4 _$ Dfor(j=0;j<h;j++)
! C" {- H0 i9 D9 \: jprintf(" %d ",a[z-1][i][j]);, P5 h% r6 H' K$ v: D( d9 e7 C
printf("\n");2 s" V! s5 I+ U/ I5 q. c8 q
}* M. u! A( b4 X2 ~
micifang(a,h,++z);
6 e/ j: C2 f& |1 N3 A j7 @! v}
4 L. u1 |+ T5 [0 e9 p/ O}1 q- ^- |) l- G, `7 W+ ~
void buer(int a[N][N][N],int h,int t)6 i4 d8 W ]4 U k7 K
{
) o# n- o9 c3 D! v' z% cint i,j,s=0;
( G0 R9 @% }2 h8 sint z=t;4 w& Y; C% W5 D3 o8 b3 L t
if(z<h) //矩阵的值不全为零。# Y" z% u: z T0 E/ m9 z8 D
{ ; ~: L$ I9 f# K* w2 B. y) A: B
for(i=0;i<h;i++)
: \& s' M; ^1 P. C+ v/ {' Yfor(j=0;j<h;j++)6 J0 ~* r# q) m; H; }; ~# o& O: p
a[z-1][i][j]=0; //全部赋值为0!4 C/ B# s3 Z$ y' c, x0 Q- W
for(i=0;i<h;i++)
8 x$ e' |" Y" S; H9 c0 xfor(j=0;j<h;j++)5 B* z. l9 J. x t9 u( y2 S
a[z-1][i][j]=jisuan(a,h,z,i,j);1 r6 s% n; u9 U5 [
printf("\n矩阵A的%d次布尔幂次方为:\n",z);
% l: n" _) P# X# @* S7 vfor(i=0;i<h;i++)
0 l6 y6 i3 @0 W: _+ |. W/ S9 q{
' R$ R0 @: s. r( o, S% ffor(j=0;j<h;j++)
5 V2 S7 x' k" V1 H{ ; W2 M7 g2 H4 L8 Q, b
if(a[z-1][i][j]>1)
4 k& Y4 L" U. N8 d, w3 L$ Z0 aa[z-1][i][j]=1; 5 `3 R4 d8 r; I
printf(" %d ",a[z-1][i][j]);7 U' ^! f+ m3 u" A9 j" G
}- A" d# N9 t( X {2 U6 U
printf("\n");8 a: @' x1 y* ]
}
* K X1 P/ c1 E8 k+ r& q$ Dbuer(a,h,++z); ' P! C7 A. ]" W! o% T- J
}
z! U6 j; h$ F# f0 n- s}! _2 g2 V+ ~7 } D+ o
void warshall(int a[N][N][N],int h), G, F. ~7 u. t' c% j
{" o G6 o7 w5 L+ `$ N8 ^* n5 t5 ^
int i,j,p,q,r=0,s;
6 k/ Y& u+ x8 z- P: [$ m5 sfor(j=0;j<h;j++)
& l# T( H7 }4 W( J5 W* Jfor(i=0;i<h;i++)) I! F% z; x Q; j
if(i!=j && a[0][i][j]==1)
; B4 [3 f7 T& }* c1 X+ J9 a{, l: r7 S- h0 q" g* g7 ?
for(s=0;s<h;s++)2 o8 E" e3 U: j
{
# P* a6 \! f7 v% e9 S3 }/ S6 ua[0][i][s]=a[0][i][s]+a[0][j][s];
4 K( Y; d9 G! m) ?' g6 H' ]if(a[0][i][s]==2)
( ]2 K& g4 r- E. r% R% j/ ia[0][i][s]=1;, d5 n- p' c; m5 _( S$ r2 H0 l
}
, W. s! e, ?. b4 a- ?5 Uprintf("\n第%d次运算的结果如下:\n",++r);
8 }" F" I, B6 b, u* {$ w, Mfor(p=0;p<h;p++)
- Y9 A+ w8 C7 H) G. } v% H+ r" j{; W9 X! d% k7 n! u
for(q=0;q<h;q++)
+ [) `( R( W. c7 d+ H* k% Y: k# a7 [# aprintf(" %d ",a[0][p][q]);+ x0 Q( o- T, u9 A6 D
printf("\n");; |$ {2 V3 h3 l& [. B+ i
}
# \6 U3 P! P$ O2 l}
$ W6 N! _& I- G# d} |
zan
|