- 在线时间
- 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"
1 S3 {) _, H, A; ~, A#include "string.h") e) R( p( `7 \. H# U. @' e
#define N 50
: V/ x# F! r. `* bint jisuan(int a[N][N][N],int h,int z,int i,int j);
+ ]6 ^2 s/ P- `. M/ lvoid micifang(int a[N][N][N],int h,int t);
1 W" H3 r. F B( pvoid buer(int a[N][N][N],int h);6 l/ H: j; X2 z- f8 g
void warshall(int a[N][N][N],int h);9 q: i. {: a; ^' ?* u) J- s; g( `
main()
`* j8 z4 i9 f5 n8 J{3 }8 o9 ?6 A" T0 F
int i,h,j,t;8 C1 [4 D) J1 V
int a[N][N][N];
" p8 d4 i; W: ]* a/ }printf("请输入邻接矩阵A的行数(或列数):\n");
% ]/ r0 Z+ J& i$ `7 ascanf("%d",&h);% {7 s, K+ n+ ?! G' e, T7 R& R5 r
printf("\n请输入邻接矩阵A:\n\n");. K* _4 E1 c# Q" k2 [
for(i=0;i<h;i++)$ t/ I( l& v: I/ N
{
3 N' O# ]. ]0 P, z; y1 y5 \/ H, A8 Uprintf("请输入邻接矩阵A的第%d行.\n",i+1);; E8 a1 |8 I) C: u
for(j=0;j<h;j++)
0 i. n) f& l$ @scanf("%d",&a[0][i][j]);
2 v3 T7 B: ?2 t- M}
7 _9 M3 z) Z }printf("\n邻接矩阵A为:\n");# ]0 `4 m/ f# f
for(i=0;i<h;i++)
1 c, o+ G2 T" Q8 r6 Q{
( z- }. Z" R+ pfor(j=0;j<h;j++); n+ R. M! p( S% a; f
printf(" %d ",a[0][i][j]);
" n: F0 U+ p- Cprintf("\n");' l7 v. {( T5 b: f2 i* F0 w
}
5 N# [4 \9 b# U5 T7 Gprintf("\n\n\n算法一:\n");* f1 ^4 p( e* p9 ^- M. m6 T
printf("\n矩阵A的1次方为:\n");- R2 y. S k& |& a2 C h& G' T
for(i=0;i<h;i++)
0 t6 X7 T" w4 x& J6 G& B) t{( z$ w& n, J# C# I* N, \2 M; O
for(j=0;j<h;j++), I: B% L5 _# _) I z1 E0 G
printf(" %d ",a[0][i][j]);. L- f+ u$ n# M* ]% V
printf("\n");
$ o, s9 _$ Z' N! I/ D5 i. W}
* j& d) }: O/ C& A [: D( mmicifang(a,h,2);/ z& M0 Y$ x2 s' G4 v m; D0 o5 i
for(i=0;i<h;i++)" e! S7 y+ n, ]% P# [
for(j=0;j<h;j++)7 u. p; Z3 y& E2 x* E- w
a[h][i][j]=0; //全部赋值为0!# e0 Q% D$ p- e& w5 T& }( a+ Z
for(i=0;i<h;i++)0 ]0 b1 h1 k) |. J: ?" D
for(j=0;j<h;j++)
8 k7 E* C1 u9 ~# K; Y" [for(t=0;t<h;t++); B* y a2 c. c
a[h][i][j]=a[h][i][j]+a[t][i][j];- N2 T: m) p7 a2 P; d I/ z; A L
printf("\n\nB的值如下:\n");
; F& {! u! K" ffor(i=0;i<h;i++)+ J5 v0 ]$ m/ c2 ^1 N- o1 K
{
& ~1 \% X& y9 M& bfor(j=0;j<h;j++)9 G+ J T" @2 y, W
printf(" %d ",a[h][i][j]);
3 ^1 u$ k9 i _1 [- Dprintf("\n");; P! z) C; F) N5 ~0 `
}
+ G* Y9 N0 I; Y/ i4 x4 O1 V: lprintf("\n\n\n算法二:\n");
( i- z8 T, Q6 n" uprintf("\n矩阵A的1次布尔幂次方为:\n");# x( u4 o$ Z h: h# p
for(i=0;i<h;i++)
+ }% s8 }3 k5 P0 m- i, f# Q% N{6 j+ k0 {6 w! T
for(j=0;j<h;j++)
/ a- C% f' |& Y* H* U{* C, A1 E. q: ?# `
if(a[0][i][j]>1)
3 J& f3 F7 `/ m( ua[0][i][j]=1;
5 g9 k- D1 p" Y: a, _printf(" %d ",a[0][i][j]);- t9 b& ]& y9 L! Y# U* f$ q
}
3 X$ e" M/ a& F1 c; n8 X8 Hprintf("\n");+ ^) K4 \. o9 t1 L+ f, c1 m- ~/ P5 U
}
* I7 o! Y6 m2 [% M( X; w& ubuer(a,h,2);
5 ?2 ~9 l* M7 G1 X/ g9 vprintf("\n\nP的值如下:\n");; A' A0 E7 ^( x) `; B0 ?
for(i=0;i<h;i++)
/ S; ]) d+ M( {- I! B{
- w4 |) ~7 A( Kfor(j=0;j<h;j++)
: T% @+ s- g# Q4 u/ {6 a; x{ j2 h) ^8 }% c9 o
if(a[h][i][j]>1)
: M# o# u4 Z9 @' o w; r: K ba[h][i][j]=1;6 Y: K0 B3 F) I5 ~+ @8 P' Y, h
printf(" %d ",a[h][i][j]);
3 E4 y) U: X# c* @% U+ a- a}
3 m0 e( x1 e) C+ H/ C8 v5 A$ O xprintf("\n");
5 u! y2 G, z- _3 J}
' s: c- E8 Z' Vprintf("\n\n\nwarshall算法:\n\n");
6 I8 U) V8 D. U$ t h, B. z% q2 ?8 C$ g- @
for(i=0;i<h;i++) //处理邻接矩阵A.转化成可达矩阵。6 V- F" e6 P* }. _
for(j=0;j<h;j++): a$ `& H1 K. K2 J# |1 q0 ]+ J; D
if(a[0][i][j]!=0)
4 B/ g+ `2 K9 w2 m% f5 O: oa[0][i][j]=1;
7 K o2 ?0 B; P, H0 S# p! v- E- Z7 cprintf("整理后的可达矩阵为:\n");# j9 Y) a9 G. Z
for(i=0;i<h;i++) A0 T. f" g8 s) F; s1 ?" |- y0 W2 S7 ^
{: _7 t& a5 J" N: r" U) n' q% \
for(j=0;j<h;j++)3 Y8 z% _; `' k' @, g- Q
printf(" %d ",a[0][i][j]);
0 R% h1 U+ }* @) A! jprintf("\n");- y; e: v( f' a; c7 q4 \
}4 T+ D, R: c, }+ B' l6 s
warshall(a,h);
4 ~) l! ^& u4 b4 `getch(); m" y8 }4 {8 q9 K' Z8 s9 P
}
$ d, b' A: j& j [8 @8 p3 _/ Yint jisuan(int a[N][N][N],int h,int z,int i,int j)
3 l9 }- Y; F) A4 B: t{/ r% {7 M5 D2 t" X
int s,jg=0;
1 A L5 j8 V' W1 d% G9 Wif(z==2)
9 U5 N" f, J0 C4 }for(s=0;s<h;s++)
0 x, L& y3 A6 E% A5 K# p ~. pjg=jg+a[z-2][i][s]*a[z-2][s][j];
7 Q" j8 D2 I# F6 Nelse 0 w6 P& L3 Q0 D" L$ C. |
for(s=0;s<h;s++)
" E# g) a+ z1 Sjg=jg+a[z-2][i][s]*a[0][s][j];+ k" L9 z1 @, k+ R/ M
return jg; + i: l7 R% b; W7 j2 N$ h- ^
}; v4 I- x0 L3 e% J* @
void micifang(int a[N][N][N],int h,int t)
% c) y1 O: {1 k& {, A{
. B" K+ j" A# G& E" ~, zint i,j,s=0;
: ]% F* n- ?3 Y( x8 Eint z=t;) B# B4 u: C6 R& k# M/ d
if(z<h) //矩阵的值不全为零。
4 @2 s' a& l1 D( j. T{
0 ~; b W2 T5 ffor(i=0;i<h;i++)
+ m! f% @( V0 T/ M' Vfor(j=0;j<h;j++)
* ]" H' E7 W% l" M$ v) c: D* na[z-1][i][j]=0; //全部赋值为0!
. {' L& f' a( x' e) j) K$ xfor(i=0;i<h;i++)
2 T4 m5 h, d vfor(j=0;j<h;j++)
; D. A# |# F! V) _7 P s' Ka[z-1][i][j]=jisuan(a,h,z,i,j);
" A+ f. ?. _. ]) @% e8 T' D, J2 o" aprintf("\n矩阵A的%d次方为:\n",z);8 I$ p! v- w8 n9 U: R. `
for(i=0;i<h;i++)
G/ L' e! R* H. A7 n, Q{0 f2 f. O. E; X5 d- A# z& R9 y: e
for(j=0;j<h;j++)
! ?+ }9 Q) f- C- V" ?+ i+ ]printf(" %d ",a[z-1][i][j]);; j$ y- H3 q7 `0 \ w- o8 J
printf("\n");
; z" ]/ K2 H% j5 h& [}
0 F! L7 X8 S' P& Z2 w4 jmicifang(a,h,++z);
0 M. G' E, ?+ X% r}
3 C2 c/ ~: a4 l}
6 L& T$ ^9 W" w7 e& \# I8 bvoid buer(int a[N][N][N],int h,int t)
9 U/ Z9 c' v5 A d1 k: T1 Z{' @; B0 z! b" K3 W1 F' E
int i,j,s=0;5 R) H+ D$ H# _* a. M f3 B
int z=t;+ O* b' D( z @
if(z<h) //矩阵的值不全为零。/ P; ^2 Z& v* y
{ ' G$ P1 ?! o7 B( g2 N$ ~1 k& g+ z1 g
for(i=0;i<h;i++)
; Q- b4 L M+ `/ O8 G2 m/ Xfor(j=0;j<h;j++)4 W/ @6 Q. ?4 }+ D
a[z-1][i][j]=0; //全部赋值为0!
3 o. r$ ]" H$ M% s4 {7 rfor(i=0;i<h;i++)2 M& X; O' A1 V
for(j=0;j<h;j++)
4 V! {; i0 \7 T4 f: qa[z-1][i][j]=jisuan(a,h,z,i,j);9 @9 O. a# F( e& w" b1 D7 Q
printf("\n矩阵A的%d次布尔幂次方为:\n",z);
/ z8 `% {+ P+ ?- rfor(i=0;i<h;i++)+ v. X/ N4 f' [/ w( H6 F2 w' x4 m: r" W
{' X+ b. T& J: m+ J$ `
for(j=0;j<h;j++)
' p) N6 ?3 L2 {$ J0 T) _" t$ o* J7 R{
: l- r8 }2 K: c7 U$ `8 A" r" R& oif(a[z-1][i][j]>1)
! u3 Q2 d" a% i9 V. ra[z-1][i][j]=1;
# `# F* a6 v2 B3 y- w! C% qprintf(" %d ",a[z-1][i][j]);! l/ r2 _7 h* M! _/ B6 J+ [
}
) Y; U5 C* T2 D6 }. Z) ^printf("\n");
( t( b* z+ r+ S6 m- W8 e: j}$ c2 N! t8 o: y8 `* D% j
buer(a,h,++z);
! f1 [5 P2 d6 v6 i' z9 |: F}
: F0 [5 e( A1 ^4 Z9 v8 ?}: C3 c. z% ^$ j* r) d
void warshall(int a[N][N][N],int h)4 g: m4 H6 ?8 E+ L; h- R. r' R
{
8 [( Z" v9 R- G4 d( @( ?int i,j,p,q,r=0,s;8 _5 _" ~ R \+ t
for(j=0;j<h;j++) I0 W/ M, I, J/ q& v5 S
for(i=0;i<h;i++)' {7 U* N1 y# f$ a
if(i!=j && a[0][i][j]==1)5 m. _# I& e. J1 l
{# |, @. C+ F) G+ k5 g
for(s=0;s<h;s++)4 f) a4 g; T2 ?. |+ P' S' I; h% d
{
/ {9 f% f0 ~3 T: }6 @a[0][i][s]=a[0][i][s]+a[0][j][s];
# b8 c! c% B) ?# Mif(a[0][i][s]==2)
. t" F: I. I. q+ ya[0][i][s]=1;
+ c" D2 `2 d! ?+ L4 ?3 }: u4 ]}
! g& e! V7 L3 Z b# T$ H7 hprintf("\n第%d次运算的结果如下:\n",++r);3 r0 ?# n+ n0 C: R$ Z
for(p=0;p<h;p++)
, ^, X5 }. p" M, V{
# }1 C" K! ^+ A, _% p, `for(q=0;q<h;q++)
; H3 v, L5 o8 q4 e' [printf(" %d ",a[0][p][q]);! C! \$ y& b# J: P& i
printf("\n");
% [+ v. \8 ^+ \$ \& S5 ]2 P9 b8 Z}
2 Y( o* E+ ^4 z3 x2 r) o+ \% [}
9 O. r9 ?( V3 Z: S# E} |
zan
|