- 在线时间
- 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"
9 m. S9 I8 A9 \/ `* W, p! v#include "string.h") m1 H' {' k3 @% w
#define N 50
7 i% O4 c* l0 [% a0 ~/ |int jisuan(int a[N][N][N],int h,int z,int i,int j);
# n* P: r+ X4 U5 i" ~, y+ Hvoid micifang(int a[N][N][N],int h,int t);
8 U8 J6 G, M$ q! mvoid buer(int a[N][N][N],int h);! ]6 `; i) e' o5 F- u8 a1 r
void warshall(int a[N][N][N],int h);
* s: X0 W- t7 s& a1 a$ ^9 emain(); D9 k) @5 T: \% I$ j9 \
{. l1 [6 A7 [: O
int i,h,j,t;
# f5 }# w1 x( B( R4 x3 z; uint a[N][N][N];
. I* [, M G0 E$ t# Gprintf("请输入邻接矩阵A的行数(或列数):\n");
& S; ~+ d, [9 e2 N% B3 Hscanf("%d",&h);
& Z g* m$ J" S, b* t g: vprintf("\n请输入邻接矩阵A:\n\n");
) D* v5 J3 Q* v; F% x7 Mfor(i=0;i<h;i++)
' X4 r4 e) M9 P) V- e{
& b/ R7 x, e# s& Eprintf("请输入邻接矩阵A的第%d行.\n",i+1);) Q4 c5 }" u) n
for(j=0;j<h;j++)
5 [: q, y/ ^$ [4 G& e# ]scanf("%d",&a[0][i][j]); ! W0 s+ X" O' j* X9 x8 V
}& Z( G i0 T0 R
printf("\n邻接矩阵A为:\n");
4 R' J z0 n; R; X" sfor(i=0;i<h;i++)# q8 S! k6 L4 W8 m3 }
{; ?: }6 f2 x! @; }8 u7 f
for(j=0;j<h;j++)
* T5 X, c5 S }! s$ x( _, Rprintf(" %d ",a[0][i][j]);
; u& G4 ~" Z& a! t/ Gprintf("\n");3 l; K, o+ C0 N& ]
}" {7 w3 E9 N' {3 t& g1 B
printf("\n\n\n算法一:\n");/ Y" {( Q' {& S$ t
printf("\n矩阵A的1次方为:\n");
* W7 u6 M* A# N; i, {8 Wfor(i=0;i<h;i++)2 s2 D8 m! e$ i8 J
{# w8 ^* g9 u" g) t$ q8 I
for(j=0;j<h;j++)
8 c3 T% @1 Z8 s! T8 m* `printf(" %d ",a[0][i][j]);0 x3 f/ ?) e q; E
printf("\n");
; C- g: V7 X1 Q" ^9 j+ q}
5 ` |9 h# u* imicifang(a,h,2);5 w: N9 n" _, P' D2 }9 R
for(i=0;i<h;i++)
+ P8 @ I- Z$ n/ ]: ]for(j=0;j<h;j++)7 g) {) ]0 _" R; ^6 }' r( J
a[h][i][j]=0; //全部赋值为0!3 @1 G; t+ w' v6 J m6 q% W
for(i=0;i<h;i++)! U7 C1 T5 B) ^
for(j=0;j<h;j++)
9 W* Q' R0 C2 s3 F# {4 K9 _3 A0 Tfor(t=0;t<h;t++)0 K1 y0 P- g h$ E0 y, |2 D
a[h][i][j]=a[h][i][j]+a[t][i][j];
2 f9 L! d2 h/ W$ fprintf("\n\nB的值如下:\n"); U& l( G' P+ E$ O" m
for(i=0;i<h;i++)
5 D: |2 ]3 x6 R+ K- V" A2 k2 `+ B{
2 [4 s/ R9 D1 e$ }+ ffor(j=0;j<h;j++)
8 a0 ^7 O8 Q7 y; M6 Iprintf(" %d ",a[h][i][j]);
8 c- \! K( V" A: x: ^7 Hprintf("\n");
( n' i& Q- t: U( b' ?}4 o0 U. \; H( m" t
printf("\n\n\n算法二:\n");
* A ]; C- E. r' F& f9 cprintf("\n矩阵A的1次布尔幂次方为:\n");" i: J9 b' N. ^7 Q/ O3 p
for(i=0;i<h;i++)9 Z3 @+ y5 w7 `9 ?* b4 \4 K* K
{
$ u7 z& [1 a; v, r/ I5 N/ Hfor(j=0;j<h;j++)
6 X. y" H$ A, ^% g- \ C9 A{, b" E! O' F: u0 X; }
if(a[0][i][j]>1)" Q* P/ {. O5 C% W
a[0][i][j]=1;
! s! \7 z% s qprintf(" %d ",a[0][i][j]);
* I3 \5 ^: ^- R, K% F. v}' V$ ~! j) C% a& [, f3 C8 z5 ~0 }
printf("\n");
: ~( B7 J( i" t3 Y}
3 S; X/ z3 X0 h* r( Y# Obuer(a,h,2);3 A1 _1 F3 E5 D. w
printf("\n\nP的值如下:\n");
/ i( b* U, L' q% N/ w% z+ ?! |for(i=0;i<h;i++)
6 D. {2 }! U4 {2 a8 P4 ]9 Z' o{
1 G B, E0 d. }: x3 {/ zfor(j=0;j<h;j++)
) C& b1 }0 \9 X y. H% R8 H: X{ 2 L8 O2 O o# s7 J- g% Y* x
if(a[h][i][j]>1), M0 I; p- n' C( I2 D: Q' ~1 |
a[h][i][j]=1;- |; E5 `; z4 g1 l/ \+ C
printf(" %d ",a[h][i][j]);2 a2 [1 U0 ^2 }# h& L
}
2 N8 J3 I* U5 D8 j9 B, v. \: qprintf("\n");
# H ^5 W5 W H5 p N}
: w" j; V7 {- Q4 k& N% b* J+ J C! l; Zprintf("\n\n\nwarshall算法:\n\n");3 F& G8 a J7 y4 {- w# J
8 c7 N; X( ?& s9 I/ i1 g' \+ L; ^. }for(i=0;i<h;i++) //处理邻接矩阵A.转化成可达矩阵。2 n+ B! [& A% Y
for(j=0;j<h;j++) s# v% g `. a f6 a
if(a[0][i][j]!=0)- W1 q" n% @7 }* U- X2 Z
a[0][i][j]=1;3 N- u1 N, Y& M6 u$ D
printf("整理后的可达矩阵为:\n");
, |) m6 M9 d& [1 o2 e l0 ?4 M5 X% C' {for(i=0;i<h;i++)5 b/ A2 T- C+ H+ M g
{- A; E$ o9 ?; @) S) p
for(j=0;j<h;j++)
9 J. Z. E1 P6 N Yprintf(" %d ",a[0][i][j]);
5 b1 o, S$ ?, O F6 ?) B7 Lprintf("\n");0 W9 b/ P; I0 z& n
}$ B; H% u h/ V8 g4 _5 @2 ]
warshall(a,h);
0 [! {+ H! Q1 agetch();) M) Y: J( p1 R4 ]7 N; B& p" ]/ i
}
. ?/ {2 B* h1 Y7 Y2 c7 U" Xint jisuan(int a[N][N][N],int h,int z,int i,int j)! V! u* ?+ I/ k$ A* Y U/ k% j; k
{
U& Z) a& n! E M7 k9 E/ dint s,jg=0;. r( @% k/ b, E1 o% H# `
if(z==2)6 s0 q! s2 O3 h. z
for(s=0;s<h;s++)
% ?1 `, j* R! _$ h. Q' ~6 mjg=jg+a[z-2][i][s]*a[z-2][s][j];
5 x9 o! [& r$ o- W: m$ y7 l7 |1 Relse
2 E1 _2 [3 [1 {& w* r" k# H& {for(s=0;s<h;s++)3 O3 V( W7 H' E
jg=jg+a[z-2][i][s]*a[0][s][j];
& g8 \5 H/ e, jreturn jg;
) @8 C* ?" E" ~3 C$ @3 l}( J3 s# V1 U6 `( _# |" U% Z N
void micifang(int a[N][N][N],int h,int t)- |1 T3 [/ ~, k* Y: o
{
% S" M. @: @9 ]$ R$ Kint i,j,s=0;) z6 h7 L L7 O+ G2 e/ Q7 I6 l7 l, C
int z=t;7 Y c4 K3 m* R. x3 q3 h
if(z<h) //矩阵的值不全为零。2 {* u9 ~4 D1 p9 [8 F9 A
{ " O8 [5 K8 D/ q/ x; ^
for(i=0;i<h;i++)
& n- H& p$ W# ifor(j=0;j<h;j++)* V2 i5 [% Z9 o( v% {/ Q
a[z-1][i][j]=0; //全部赋值为0!& p5 W0 q) @, O/ H0 J
for(i=0;i<h;i++)
Z$ l5 ^& {5 q3 o& H) }1 |# cfor(j=0;j<h;j++)
" Q0 w# @0 g& ^' ja[z-1][i][j]=jisuan(a,h,z,i,j);
% m. G3 G! [, X& oprintf("\n矩阵A的%d次方为:\n",z);
8 \. }! W1 V8 F- |. @- s: k$ t) ^( Rfor(i=0;i<h;i++)) V$ l& {0 V' z! |( V F
{1 c: t) l- S9 Q+ l K8 z* R1 _
for(j=0;j<h;j++)
& @" W9 {6 r& e' Uprintf(" %d ",a[z-1][i][j]);
4 p. U; n, D6 d5 V0 Aprintf("\n");( G) @. [- m( u3 q) ~4 b' i2 A
}
; a& W- e+ Q% V5 [4 m' zmicifang(a,h,++z);
% M1 ]2 c( d9 u; ~}
. c1 r9 P9 ^5 c1 A- T8 n}: I8 J& G. B& |& [
void buer(int a[N][N][N],int h,int t). W6 u6 c+ N" h" |8 n1 M& f+ R
{
' d$ s) n8 t- F; Jint i,j,s=0;4 D/ t" V2 f7 R" ]0 j( k" U
int z=t;
) m; x/ H: D5 o! R. ]' @if(z<h) //矩阵的值不全为零。 n1 Y3 a* h+ r" g- [9 a
{ # j( t; {# `- s. r
for(i=0;i<h;i++)
# L" b1 m, Z8 x( hfor(j=0;j<h;j++)7 V2 C9 D* z/ t1 N6 I9 n& H3 U
a[z-1][i][j]=0; //全部赋值为0! ~& M) T4 b& b/ O5 Y- Z" F
for(i=0;i<h;i++)7 {" U7 C2 L! m# [
for(j=0;j<h;j++)
3 p+ U$ L5 Y' A# K' j/ na[z-1][i][j]=jisuan(a,h,z,i,j);3 D9 B, y. v0 t# O! ]
printf("\n矩阵A的%d次布尔幂次方为:\n",z);
' R, o( b' t5 M1 e4 Cfor(i=0;i<h;i++)
* W- f* m2 G+ r6 o6 p3 S{4 g8 }7 ?; ~3 I1 t* Q T2 O1 ~; e6 x0 g
for(j=0;j<h;j++)8 g& E1 z# I( Y0 c) F* V6 g* C9 \9 b
{ # _; z. N' t0 q+ e
if(a[z-1][i][j]>1)
" J/ C T. o& n( O/ A n) Ga[z-1][i][j]=1;
) h# [4 N, }+ t0 xprintf(" %d ",a[z-1][i][j]);' t2 z" q6 _3 w" D
}
* x `' j- u* U' _- Fprintf("\n");) Y: R# n+ |1 g( u4 [
}
' N! Q1 s0 @7 o9 Y: u" r/ \buer(a,h,++z); $ H9 I! `4 ]' _) a
}$ c. |: h. m7 p) e4 B2 ^
}2 O* j/ a; {/ V9 w
void warshall(int a[N][N][N],int h)
- r4 b; s/ v# [, A{& j7 M2 b; p5 ^0 N
int i,j,p,q,r=0,s;
; M! J' s5 i2 M+ @; ^ k8 h, {; Xfor(j=0;j<h;j++)7 u9 F9 n" ]- V% h7 G w
for(i=0;i<h;i++)5 {; z: p, D# K% Y/ v
if(i!=j && a[0][i][j]==1)/ V8 q$ t. [* ]
{
1 H; J. [. c( x' ~for(s=0;s<h;s++)
- d" d0 f( i- Y{ 6 q# |- h" \: E6 A
a[0][i][s]=a[0][i][s]+a[0][j][s];
* p9 j$ j! F7 Q* Vif(a[0][i][s]==2)
. Q& M q" F) X$ \a[0][i][s]=1; {6 M, P( h) H5 \( y- J
} % |7 G0 W2 |: k3 u0 Y# N
printf("\n第%d次运算的结果如下:\n",++r);
3 H2 ?. ^( o6 H/ B) o$ Sfor(p=0;p<h;p++)
) l4 g$ u- w% O& k0 w0 [/ m2 T1 n q{* W( _/ g' d. |
for(q=0;q<h;q++)
% ^& O3 [" z2 J+ [( t5 Oprintf(" %d ",a[0][p][q]);4 r; C2 Z! C3 y5 O$ O/ B7 ^9 d$ I
printf("\n");
' J* v# m- A# _. p% {; v: s' e}
) g$ Q/ a& E+ P. A" k, X: G+ p}* {$ b9 m" ?& \1 n
} |
zan
|