- 在线时间
- 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"
6 S& r1 w9 c* A* t#include "string.h"
( }/ P. d& l# N$ R t# {- l/ a#define N 50 ; }" F5 u& ?8 J2 c) x6 h# X: v! O
int jisuan(int a[N][N][N],int h,int z,int i,int j);
' d- h" X# i- evoid micifang(int a[N][N][N],int h,int t);, A& k0 ~( z2 C- j! p n
void buer(int a[N][N][N],int h);0 P* c5 M2 H7 H. x$ p# V7 Z
void warshall(int a[N][N][N],int h);$ K! a7 I% T6 p. C$ p
main()0 Q i6 _6 n: @ ?, e
{
! d4 f8 R2 L4 G) |5 [0 vint i,h,j,t;
) g$ ?8 R' D! X. q0 q1 `: r* ~int a[N][N][N];
, m' n$ e* y V9 f/ Q$ Fprintf("请输入邻接矩阵A的行数(或列数):\n");# {: n: O0 h; | z. x: x7 D' x
scanf("%d",&h);
) Z" Y# E9 m" r; p: dprintf("\n请输入邻接矩阵A:\n\n");
5 D$ S b" \. \" K$ ~5 Hfor(i=0;i<h;i++)0 b7 @) j0 `, |
{
% n4 R) k" t$ L! M. qprintf("请输入邻接矩阵A的第%d行.\n",i+1);5 e' v" a! E+ Z) q) B4 w9 ?# G
for(j=0;j<h;j++)
. U1 k/ r3 ?3 X, G7 x& e( Kscanf("%d",&a[0][i][j]);
9 G% t2 M! W& Y0 P' X! M6 w}$ T- L0 @% x" N ], b& Z. V
printf("\n邻接矩阵A为:\n");
6 K0 Q. E+ n' Ifor(i=0;i<h;i++)$ Z$ [ H4 w% X2 v b+ X
{
* N& K8 |5 k0 W7 ffor(j=0;j<h;j++)
}: u5 k8 z# H1 Rprintf(" %d ",a[0][i][j]);
0 V& o J! M4 P5 s% Sprintf("\n");
; {5 O: m8 n! s7 P. M, l; H' y4 N}
1 F6 j' x& C7 dprintf("\n\n\n算法一:\n");
4 F: M i: a* l9 I4 @printf("\n矩阵A的1次方为:\n");( e& ~$ n* w% n3 O& D: ]
for(i=0;i<h;i++)2 l- F8 G, U% | ^2 d% X0 i
{; E& N, l: {- v9 `* D1 i
for(j=0;j<h;j++)
5 v0 h* z9 C( Eprintf(" %d ",a[0][i][j]);
8 T5 }/ l$ |: g. e$ xprintf("\n");
# q1 a! c) {- D, s0 R5 ]: `}
9 U" m7 E. e. w% R! Y, _# Y7 Rmicifang(a,h,2);
/ }/ k1 E+ }) Hfor(i=0;i<h;i++)
9 O7 U; n) f6 f' p; H! R+ ofor(j=0;j<h;j++)
! A) X% _- S, v) Sa[h][i][j]=0; //全部赋值为0!
+ ?& }7 v, m8 d) afor(i=0;i<h;i++)% _9 l' K1 k) l3 p" v' U% x
for(j=0;j<h;j++)
3 |- L% d! Y* i, I n( l* r5 G) ]for(t=0;t<h;t++)
# r* U- C, T7 f- ^* f, H" e9 g+ {a[h][i][j]=a[h][i][j]+a[t][i][j];. E( x* R0 _5 c! N7 g
printf("\n\nB的值如下:\n");7 o* J* M: W6 d. h, `8 ?
for(i=0;i<h;i++)" ~, b) L7 @0 W& ^5 s! t, x3 t
{
" d2 n" H' H, G/ tfor(j=0;j<h;j++)" r5 w/ K D& F& s, C" H8 n( t
printf(" %d ",a[h][i][j]);
4 I' w! o" L# b u& }+ jprintf("\n");
4 j% W6 l+ ~" M' Q# h7 J9 ^}$ i- w" K% o% w7 m1 b8 i
printf("\n\n\n算法二:\n");/ Y3 k: I) B4 s( ~5 @$ A/ G: q% c
printf("\n矩阵A的1次布尔幂次方为:\n");2 F/ F+ \2 j7 Y& V, E2 ^
for(i=0;i<h;i++)9 b" Y9 _( _- N: w' G2 @: y9 O2 u
{+ @ x2 {5 j, n- d
for(j=0;j<h;j++)
O) c% d# b" L8 v/ V" b{
r& t- n) r, \( X8 @8 S8 L; Pif(a[0][i][j]>1)6 S( i' @7 l' S& T
a[0][i][j]=1;: L" c/ Y9 h3 U' F( U
printf(" %d ",a[0][i][j]);
W$ Q4 m) e/ `/ x3 o0 B}: P4 j$ c. W! c$ u! ?
printf("\n");7 a3 g8 d+ Z$ c* v$ A
}
4 e1 T* ~# a3 f4 ebuer(a,h,2);9 d# p" g% v& S+ K, ]
printf("\n\nP的值如下:\n");
2 e! a' J6 {; s/ Sfor(i=0;i<h;i++)4 F$ {1 P' f! \; g( c6 B+ @( j
{
. T7 a( C# X3 ?for(j=0;j<h;j++)
/ C- K3 F2 ?4 N; I' ~{ - s9 j1 Y& D' ~: @
if(a[h][i][j]>1)/ ]; p* I4 A9 W& Q5 O6 }( C
a[h][i][j]=1;# x( C; ^2 G, U
printf(" %d ",a[h][i][j]);
" k% D1 a. G9 q$ Y}
/ U* u. s m. a1 g6 U0 v1 rprintf("\n");
. ?1 y( }! f$ f8 Y}
% ~- E+ y' d: T4 f0 d& c' kprintf("\n\n\nwarshall算法:\n\n");- I+ v" H4 `) J! P# p$ K- U6 {
( b' v0 S0 u, b1 W& ~; Z
for(i=0;i<h;i++) //处理邻接矩阵A.转化成可达矩阵。9 o& c* O; j9 Y; M" r4 {
for(j=0;j<h;j++)
1 E$ h7 F( l1 [" o7 uif(a[0][i][j]!=0)
; F$ q: h+ C1 \a[0][i][j]=1;5 W! [ _9 g. s! f0 t1 s6 ~: j
printf("整理后的可达矩阵为:\n");" o8 J" k# e9 b9 c' G
for(i=0;i<h;i++): k" b$ ?: r9 V+ f
{
; g" A' r) V4 c! xfor(j=0;j<h;j++)0 O& u: F3 K( @ R0 p
printf(" %d ",a[0][i][j]);2 ^/ o( o/ T: Z5 M% G
printf("\n");& Q+ [& L' G2 y" ]* }% c
}
4 `' W L" q! m$ ]warshall(a,h);
3 t( K2 ]% |# _' ~2 E5 A& ^/ mgetch();/ ^8 M3 ~0 j \+ A' x
}; K1 j) v/ H! c5 Q8 H( W
int jisuan(int a[N][N][N],int h,int z,int i,int j)- ]1 m, ?! [- L' V
{
+ n3 T6 J8 L9 Y& ?, i$ _int s,jg=0;5 j! O4 j9 _# Z0 v
if(z==2)8 D; M; D( M/ S; @6 S: N% C
for(s=0;s<h;s++)
- ^' {& C5 {; d3 h6 a! P! Vjg=jg+a[z-2][i][s]*a[z-2][s][j];% e0 y# u4 x3 p( r! Q5 P1 i7 t$ l
else
1 P$ l6 r8 _% kfor(s=0;s<h;s++)& `: ?+ S# a b7 N& l' q
jg=jg+a[z-2][i][s]*a[0][s][j];
3 M4 ^# i# r; r4 h, Preturn jg;
/ r! q+ Q. b3 W' s}6 n( u' m7 P7 W
void micifang(int a[N][N][N],int h,int t)
' g! C4 Z8 z+ P1 v. ~& H9 w{
& Y D: h9 c! H% {int i,j,s=0;
, |- u: C) A, J% S" D# l! kint z=t;
. w& r1 V* G1 {5 L0 gif(z<h) //矩阵的值不全为零。! x8 i# x( ~ C! P, d
{ 1 a" L4 ^0 }: A9 S9 ^' n
for(i=0;i<h;i++)
) Y0 a0 m G% @7 v$ M4 v1 B/ ?) b( gfor(j=0;j<h;j++)1 j% z6 |( b3 z3 \
a[z-1][i][j]=0; //全部赋值为0!
( |0 d+ G4 A: p7 S7 p# A6 u; J9 jfor(i=0;i<h;i++)
# y- W/ O5 n7 G) u" F9 dfor(j=0;j<h;j++)
* k4 M* e' \+ k: }; m$ p* Xa[z-1][i][j]=jisuan(a,h,z,i,j);
, H6 {/ A$ U9 Xprintf("\n矩阵A的%d次方为:\n",z);
/ d, D, ^" h3 K6 ^) P$ Jfor(i=0;i<h;i++)
$ Z+ Q/ ^9 A2 y; t9 f3 m6 s{* J6 G! Q1 m* @
for(j=0;j<h;j++)3 ~1 l1 j: L! a. B7 r d) V. d
printf(" %d ",a[z-1][i][j]);6 G0 k+ @0 k" o5 @8 s
printf("\n");, Z+ A5 k5 a$ I1 v
}
" D0 e% {2 P- Q3 `: rmicifang(a,h,++z);
$ w& @+ Z& d, R4 z5 C+ T l' m}
- c* C, ]9 ~' I* L2 f}
5 g. o! f( o) i$ D. Uvoid buer(int a[N][N][N],int h,int t), [6 q: a1 }2 z, o z
{; K# |9 N2 k7 P! e6 n! c6 Y
int i,j,s=0;) y% v. X8 b0 d% ~' E* w" g
int z=t;
0 c0 I' W! D _6 v1 dif(z<h) //矩阵的值不全为零。: j% j4 [* u7 u- p0 q _# y
{
6 {# U$ z) s* ]( ~8 x: ~* Ifor(i=0;i<h;i++)3 L* g( t: j0 a; q, x
for(j=0;j<h;j++)
G# v2 b& d, F9 b5 Wa[z-1][i][j]=0; //全部赋值为0!2 u M) v2 B2 S; {
for(i=0;i<h;i++)
; [9 e. u' X9 n4 D* c; [for(j=0;j<h;j++)* ]! y! z- Q! W }- S$ X. u* ]
a[z-1][i][j]=jisuan(a,h,z,i,j);
* h4 L/ Q, b; {9 q; Q" aprintf("\n矩阵A的%d次布尔幂次方为:\n",z);
) r7 ~0 G1 {$ h& G' j9 \* @for(i=0;i<h;i++)+ N* [6 a: ~6 _! B3 {0 H( j, e1 `
{
% l0 f. [7 i) _# p- H2 q: cfor(j=0;j<h;j++)
; h2 P) A* ?/ P{ 6 G2 F X8 K I' J. j
if(a[z-1][i][j]>1)# s- c3 s6 B4 V! r* R+ z
a[z-1][i][j]=1;
5 L3 H6 O" f' C8 `5 g" \printf(" %d ",a[z-1][i][j]); m! N1 C8 m" W4 I4 v* Q+ F! t
}5 j9 _3 R4 Z* {5 K" [3 y7 N8 z
printf("\n");
) u8 Z) @2 Z2 C' G) ~! }}1 P" `0 V9 S7 d! T( B: W
buer(a,h,++z);
# E2 x9 R. b2 { s5 K& e( N% f+ g" [}
9 D8 H0 r* u' Q w}' y! s. S. {( [2 g E
void warshall(int a[N][N][N],int h)2 I( M0 D& \# c2 B2 i% g! m1 E
{! L/ C8 |0 j3 r7 ]0 a0 `
int i,j,p,q,r=0,s;9 Y$ L) d/ \* G9 [. K b* B' Y
for(j=0;j<h;j++)
! f/ E7 A6 m' q: @for(i=0;i<h;i++)9 ~; [: g' k% j9 }
if(i!=j && a[0][i][j]==1)
4 z' R7 P/ G# V$ O{
3 y) o" p0 Y& k2 wfor(s=0;s<h;s++)0 Z; u8 i$ ~6 n: x! T9 \) x( |: n9 u
{
" ?: N1 j5 p/ x, Q" t' {a[0][i][s]=a[0][i][s]+a[0][j][s];' A; i8 ]2 D+ v! W/ D# {
if(a[0][i][s]==2)# O0 m1 s. ^; [, H' t1 m
a[0][i][s]=1;
9 O" s0 j9 r4 x6 w) K$ F# T} 0 {( `. W4 J5 l& _1 N. b) p* I
printf("\n第%d次运算的结果如下:\n",++r);
' Q, W+ o+ M" f$ e2 D6 }for(p=0;p<h;p++)
2 f* Q% E+ q7 b6 W8 J{
D! C0 b" \. Q& S1 g2 w5 Wfor(q=0;q<h;q++)
& t* v: A0 L q6 eprintf(" %d ",a[0][p][q]);
/ c U& }' O% m6 z2 N& zprintf("\n");% f; p$ ]0 f: I
}
4 c. z4 ^& Z6 z( {! L3 L. @0 l( u}
% S, ]$ z8 D+ A; `7 q3 F} |
zan
|