- 在线时间
- 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" |' j- n5 W$ A+ \
#include "string.h"
' M S0 ^. t* d( e) L#define N 50 . J, D) }9 R8 a- u8 N! w
int jisuan(int a[N][N][N],int h,int z,int i,int j);, v2 g; Z5 m* J3 G3 `9 x1 a: \
void micifang(int a[N][N][N],int h,int t);
4 `* Z5 ]2 h$ e$ S4 q# Xvoid buer(int a[N][N][N],int h);
5 i9 R% B* }3 b6 Cvoid warshall(int a[N][N][N],int h);
u' ^/ _7 | _' ?1 x+ kmain()
& a7 c( t+ R. U; k9 P1 o{
) L$ e9 s" r& V1 l, uint i,h,j,t;1 D" V+ M" l( t5 b
int a[N][N][N];3 y, V4 X( K2 T! m: L: I
printf("请输入邻接矩阵A的行数(或列数):\n");6 ^) d6 B* B2 X' ^/ |' K. i4 U
scanf("%d",&h);
4 K; W& _1 M. i7 O2 Xprintf("\n请输入邻接矩阵A:\n\n");. ]7 P% u0 L! o5 S' K8 [ t, N
for(i=0;i<h;i++)
9 |5 O! |0 H# z' E% s$ m: m/ n& E{3 Q$ z2 m* _& v7 }4 _
printf("请输入邻接矩阵A的第%d行.\n",i+1);
" D6 E7 V. e+ c& kfor(j=0;j<h;j++)
$ x- X6 M4 I# f' e3 }& ^# m2 b4 yscanf("%d",&a[0][i][j]); - w+ P) m; ~$ y% W4 s
}
6 U" _4 P+ X! }printf("\n邻接矩阵A为:\n");! h) f! {$ Y, C, w4 n) V6 B
for(i=0;i<h;i++)3 ~% V& v' v \0 `
{& ?3 M# i$ s j
for(j=0;j<h;j++)" k2 v, v6 j, F$ f' s
printf(" %d ",a[0][i][j]);
; x* q- \$ }7 g/ ]printf("\n");
; D) E3 G8 B* E% } E}
4 v8 y6 h# E% l& ]: y) s7 L a7 Gprintf("\n\n\n算法一:\n");
1 F7 [2 I7 Y9 w6 z9 qprintf("\n矩阵A的1次方为:\n");) Y9 P3 l+ o* a5 t* y4 N
for(i=0;i<h;i++)
- x+ E4 U/ V R- a" W& k6 P2 x/ g{) o' l h K- @2 t2 Q% O8 m
for(j=0;j<h;j++)2 }$ @3 e8 o, k3 H7 x: w v
printf(" %d ",a[0][i][j]);
* s6 {( [- X' d8 m! ^# s7 R0 Fprintf("\n");8 n9 ~6 T% D3 v/ y+ e3 W
}1 U; K& y2 z. X) L
micifang(a,h,2);
K# u j/ n h% b9 a; d* w% w% Nfor(i=0;i<h;i++)
^; t, d2 o7 g/ lfor(j=0;j<h;j++)9 A6 C1 E% P' c: k
a[h][i][j]=0; //全部赋值为0!
5 A0 t' @( N; ~# S4 J/ Rfor(i=0;i<h;i++)* L/ ~9 w4 s( P3 M7 R7 e+ G
for(j=0;j<h;j++)) r3 ]1 l% b3 ]0 R [2 [' u! K
for(t=0;t<h;t++)% C" z8 m& g$ W" x8 d) ]
a[h][i][j]=a[h][i][j]+a[t][i][j];
3 j5 X7 _ Z. _2 D' L# [5 E* c' Zprintf("\n\nB的值如下:\n");
$ w; F3 @4 }- Q6 }2 C/ `for(i=0;i<h;i++)
9 ]$ {3 ]" l+ y5 ?4 O{, H- H( u0 t$ Z5 l6 L
for(j=0;j<h;j++)
- `/ I( a3 U1 ?, A# G7 I3 K) V# dprintf(" %d ",a[h][i][j]);0 J" [, ^- {1 n& H# P
printf("\n");
3 O' X* O7 v, Q. g1 t) O}
% L( o, o# C" p6 uprintf("\n\n\n算法二:\n");9 o4 w( F z5 l3 l; L+ y
printf("\n矩阵A的1次布尔幂次方为:\n");+ H1 e( D+ H* w
for(i=0;i<h;i++)
9 O$ c9 ?( w+ n; k1 J" Z' S! }* h{
- r* w# n5 S% {5 A+ Rfor(j=0;j<h;j++)
2 n5 F3 a& Z' Q: B{ q: ]% B6 c: ]3 Z P
if(a[0][i][j]>1): U( \! n1 Y2 y) t: Q5 l7 d, i; o1 B
a[0][i][j]=1;
7 I! ~" O2 B r2 u q2 }: E2 i( `6 Yprintf(" %d ",a[0][i][j]);
. N& `* H0 S* j( I( }' Z! U' B}
: _8 x6 K P' Y+ w. R& dprintf("\n"); i) e' ^6 n' Q+ w$ Y& X
}
4 K! r2 P: q; W0 J+ zbuer(a,h,2);4 j. i6 c2 [5 w! ^
printf("\n\nP的值如下:\n");+ g7 a4 N6 [' `. d) w$ I
for(i=0;i<h;i++)
( Q5 W2 p1 K* ~( O' e* H1 R+ S( r{( k7 V2 z1 q; A) x! K
for(j=0;j<h;j++)
3 {! E9 O) G+ e, n9 Q{
& c7 T. T# x1 Q1 hif(a[h][i][j]>1)% D* s/ U0 Z$ q3 W8 k- _
a[h][i][j]=1;
( n2 v, m0 r) K9 Qprintf(" %d ",a[h][i][j]);! @! \) x$ c& o( r- S- Y( a: j
}0 R% J* P) K' Z0 q! x0 Q% k
printf("\n");
1 i; n# g+ r& d% K, ^}, r/ S# g( c% V9 M5 n1 m L0 G8 {
printf("\n\n\nwarshall算法:\n\n");
$ c- n0 ~/ _' \
5 w% U3 a8 }+ Pfor(i=0;i<h;i++) //处理邻接矩阵A.转化成可达矩阵。
8 H! T. Q" u% g5 _% M" gfor(j=0;j<h;j++)
1 p' { p6 |2 ?if(a[0][i][j]!=0)
; d. | ?7 j- H7 p( b; K1 n" }& Oa[0][i][j]=1;
$ o4 Y. a2 o- _9 m( i2 Oprintf("整理后的可达矩阵为:\n");/ W1 a* N) @% _5 @4 M! f E
for(i=0;i<h;i++)' U* i% K( D, T# n' ~; v
{
7 G2 R9 l) j8 e) ?. f$ ffor(j=0;j<h;j++)
$ `' Q3 k6 G0 @' [' A! s6 Zprintf(" %d ",a[0][i][j]);' Q' s% z& Y& R6 J
printf("\n");
7 @& X, v" ]7 @$ k$ }}
0 [7 G6 }. Z Z5 P( Q# |/ x) Mwarshall(a,h);
4 j$ s9 v( ~/ V4 c0 G; Mgetch();! u5 @1 j& a7 L4 Y9 t( t% q0 D4 C0 o
}
* w: I; e% j- ^, a& T, Dint jisuan(int a[N][N][N],int h,int z,int i,int j)
# c4 v: @5 @+ {) q6 Z4 L{
}- s- d& o0 M5 \" Z- U, A$ o9 Mint s,jg=0;. `! `$ z. Z; I
if(z==2) W6 W; Q5 ?6 \$ L: P3 q# C% O5 a
for(s=0;s<h;s++)
$ [. d1 t/ n( m/ @jg=jg+a[z-2][i][s]*a[z-2][s][j];8 _- O$ c$ |2 v. \1 W& r
else 3 r/ j( _7 f1 L- l- r! b) ?/ ^
for(s=0;s<h;s++)
4 n3 D: Q- Q; ~: b' i* Djg=jg+a[z-2][i][s]*a[0][s][j];7 V% [! Q0 B8 m4 \0 u% d) V
return jg; % T6 w, C+ _8 }! a( G( }
}
3 W, S+ a" f4 v. Lvoid micifang(int a[N][N][N],int h,int t)% q* Y' `8 M' m9 ~ ?6 p
{
3 B9 Q5 O6 A! Q# n/ B" E ?3 ?9 U5 W0 Dint i,j,s=0;4 ^" J* u& l* C) i1 ~1 k
int z=t;) c/ I% X" F! ]0 \; a+ \
if(z<h) //矩阵的值不全为零。
( C: |! v, S& Z" \* M, z/ G4 D{
. u" q8 E( B4 h$ _* @- f# @: b! M6 G/ Vfor(i=0;i<h;i++)
' R, B0 ^3 Q5 F. X1 c* sfor(j=0;j<h;j++)
: Z/ h) m/ [8 p& X9 L/ n5 L# Qa[z-1][i][j]=0; //全部赋值为0!- B8 C3 `! r! ~4 v; w3 w
for(i=0;i<h;i++)
: Y! f5 U! R. m# A. z& ofor(j=0;j<h;j++)! [% t& C. z$ X6 J
a[z-1][i][j]=jisuan(a,h,z,i,j);
/ U2 J% S) C# u. eprintf("\n矩阵A的%d次方为:\n",z);& K8 x/ x6 Z% }. i7 x+ Z
for(i=0;i<h;i++)
, t! E a: ]7 }/ o+ ~3 v, {{% F, K& K3 m3 w3 Q
for(j=0;j<h;j++)
( P" p( E6 I- N$ C/ B1 u& L+ qprintf(" %d ",a[z-1][i][j]);
6 J7 g7 L9 b/ U9 `printf("\n");" g0 u7 }$ y J( K$ A
}" {6 Z0 y4 I4 n7 {: ^. S' t) _" ~; ^* i* C
micifang(a,h,++z); % m3 D, a, u! |$ }( U
}/ E3 _4 j, d1 M! Y3 }9 K6 a
}. @* g q8 V4 D ^3 T% M
void buer(int a[N][N][N],int h,int t)3 c: S+ w0 z2 @& e$ [
{" R& i0 M9 I$ U3 b2 _" j/ S
int i,j,s=0;$ Y* S% M( k% T, H" _
int z=t; T& X! x0 ?( |
if(z<h) //矩阵的值不全为零。, b6 h! \/ V7 J/ u" t9 M2 D
{ D( D* [1 T+ P; r
for(i=0;i<h;i++)
7 h+ s, Q6 s. A3 K/ Q) gfor(j=0;j<h;j++)
7 _" O4 ?2 k9 E {) w# P: _" r3 M1 n6 Za[z-1][i][j]=0; //全部赋值为0!$ N& U3 E; A. k: B6 |
for(i=0;i<h;i++)" J' y$ X. {( B# V) e1 u
for(j=0;j<h;j++)
0 m N* D7 |, ?/ w2 Q' l1 z- P" L: Y6 u4 ya[z-1][i][j]=jisuan(a,h,z,i,j);( f. Q! ^ p2 C% ?6 o
printf("\n矩阵A的%d次布尔幂次方为:\n",z);
: b; X1 {! t8 d: [$ \for(i=0;i<h;i++)
" t; x) ]# N# y0 P4 h* H! I8 p( L7 b{# T5 P- X% B% [% d1 t0 K9 {& Q7 t
for(j=0;j<h;j++)
% W% h$ X$ |1 M) j, B7 H{
" B8 d. `: x8 v2 S) B& N1 Qif(a[z-1][i][j]>1)
& Y& w+ y' N- b8 S5 qa[z-1][i][j]=1; ( F5 j4 P; l) ~& Z8 u) E4 y
printf(" %d ",a[z-1][i][j]);) L+ e. h+ S) ~# e e2 [
}
x) n* G6 D4 ?7 \; v4 Mprintf("\n");1 B2 s% H" M0 _! T
}. v2 U. R) q. j$ ]2 s
buer(a,h,++z);
Z4 x- K0 E- X- {4 \! H2 j}# S- G5 g) c/ c6 G3 Y
}1 u9 S( K8 ~! P/ v
void warshall(int a[N][N][N],int h): ]0 { p8 Q: A' {' R
{6 g5 j/ D& |$ b' d& @7 z
int i,j,p,q,r=0,s;
+ H/ _& _: J! [. z1 ]. m' U7 \for(j=0;j<h;j++)
% U& _, Z9 T( m& ufor(i=0;i<h;i++)" k7 i+ n: m3 U& Q- r/ V' B# p
if(i!=j && a[0][i][j]==1)
( S2 E5 B9 b, L8 n" f) ]2 R+ L{: [$ ]3 F. J) M. n4 B, A3 J$ S
for(s=0;s<h;s++)( c' }* E0 r6 m8 n9 k
{ # U p2 h; n# G& C# @+ b
a[0][i][s]=a[0][i][s]+a[0][j][s];
1 o1 C8 [8 \- ^# w1 eif(a[0][i][s]==2)/ q8 u0 {1 |0 o% M
a[0][i][s]=1;
) D: |" L* Y( G} 8 q, E6 L" w0 W' |# L. Q
printf("\n第%d次运算的结果如下:\n",++r);
! J- t( P8 ^2 V9 Y4 ~, k4 Q8 vfor(p=0;p<h;p++)
$ m+ Z6 A" K1 J6 Q( V1 [9 x2 y{- X j$ B) l9 l6 v# Y5 ]
for(q=0;q<h;q++); x4 i6 ?8 M& |5 z5 B" A
printf(" %d ",a[0][p][q]);
% R7 J! E- J" U) D2 vprintf("\n");
2 v3 s/ o: z8 d! f1 `4 Z* l}6 v8 T) [. N2 V7 j' a% c, F
}
. e: ]. ~% D# k, K} |
zan
|