- 在线时间
- 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 K+ s! t1 l# x* w7 z: _0 z
#include "string.h"
% F6 A1 V9 k, X' H: P0 G5 F#define N 50
6 f8 X, }5 ^$ T% g; ^ l& `int jisuan(int a[N][N][N],int h,int z,int i,int j);
0 f4 O, @8 [8 E U! i5 {; e. |' x7 u' Xvoid micifang(int a[N][N][N],int h,int t);
7 C J$ T: h F. v, ]0 J. q% e% Z2 `: Vvoid buer(int a[N][N][N],int h);5 v* n3 j( a1 n& h/ @
void warshall(int a[N][N][N],int h);
2 f/ b4 n; b/ `2 gmain()
% F/ A" s9 a( V Z{3 M1 h; {# j" Q! B
int i,h,j,t;! Z0 w ~2 Q; f2 @
int a[N][N][N];
. D) @. N" I# A/ S/ `printf("请输入邻接矩阵A的行数(或列数):\n");
, A* S2 w3 k9 L- [9 ^+ c) xscanf("%d",&h);. h# l$ {& T! X% K: T$ V3 I4 ^) U
printf("\n请输入邻接矩阵A:\n\n");
& X5 g& E& K6 n8 ^: Z4 T" Pfor(i=0;i<h;i++)' O. v6 |) Y! F, r- W
{
* b+ ~- _! l6 U u2 {" Yprintf("请输入邻接矩阵A的第%d行.\n",i+1);, l; p- Z/ N' | |% B
for(j=0;j<h;j++)* d: ^$ _3 v( v0 w% a6 X. Y$ O1 _2 T
scanf("%d",&a[0][i][j]);
N& O1 A" \# A}- s( ]" X; U2 q2 F8 r( ?
printf("\n邻接矩阵A为:\n");
3 J/ O; T. [- F5 `! Lfor(i=0;i<h;i++)
( c) M3 z2 C a( O{
3 r" k! Z$ e- F4 q g) }for(j=0;j<h;j++)
1 o ^4 H5 d: H# a0 y n0 Mprintf(" %d ",a[0][i][j]);
4 h/ M4 p' @9 h: v" G! _printf("\n");% ^. ]( j/ [+ q
}
% g* R i+ [1 N7 [printf("\n\n\n算法一:\n");
6 b" F: r! P, D! }" Fprintf("\n矩阵A的1次方为:\n");
* `' [$ q4 E8 Xfor(i=0;i<h;i++)) H# G/ U T- u4 F
{
' u) {) z U0 z" B, ?0 X* ?/ ifor(j=0;j<h;j++): u! o) D! R+ z: X* l
printf(" %d ",a[0][i][j]);
' u4 x: C5 L Y* t6 u3 eprintf("\n"); q6 U2 ?+ S9 j! Z: z
}4 Z( O: y5 v' A! p
micifang(a,h,2);
\6 P% r' q6 h3 T, i. p8 dfor(i=0;i<h;i++)
# c" n. e( V) g* Pfor(j=0;j<h;j++)
! R" S$ c# @5 h+ c, ?& |6 i" fa[h][i][j]=0; //全部赋值为0!/ `* [6 [2 @! V. M5 D6 F
for(i=0;i<h;i++)8 M- R! J9 y3 O% e2 H7 Y
for(j=0;j<h;j++)
- Y* G; Y* O( m! v3 m' Kfor(t=0;t<h;t++)0 N; w3 L+ g# \9 Q
a[h][i][j]=a[h][i][j]+a[t][i][j];
+ V- ~% `: S8 K1 x& Nprintf("\n\nB的值如下:\n");
; h+ W: Q8 j* v8 F# A& y& f4 F' }' wfor(i=0;i<h;i++) M9 i" H# w- x) e8 g. W r
{2 V& P5 B6 \* p. p3 X- Y
for(j=0;j<h;j++)
, s; K( U/ {9 xprintf(" %d ",a[h][i][j]);
0 |% l3 J2 D, O8 Tprintf("\n");
- t/ v" y/ p+ U$ b; N}
! x# q9 b6 P$ Q' i; b- Y) ^printf("\n\n\n算法二:\n");
7 S) c2 ]; M9 i$ c7 ^/ B4 }2 G6 Gprintf("\n矩阵A的1次布尔幂次方为:\n");/ g7 P; _ v5 O. [9 E7 j
for(i=0;i<h;i++)
8 I4 X+ X+ q! q{' r2 Y4 C& z' G8 a" Y
for(j=0;j<h;j++)
) n" Q5 I* S( t$ e5 c{1 p6 ^8 |: d6 B9 o1 H _; E
if(a[0][i][j]>1), p3 v6 ?7 C7 l7 z) D+ u* D
a[0][i][j]=1;9 P0 c+ T/ \( E1 r
printf(" %d ",a[0][i][j]);5 |$ x" ?* e5 ?+ U% Z
} W% y6 x% z7 ?! e$ q4 V
printf("\n");4 T+ _, t; C, z+ r* e
}
+ b k1 e0 I+ }+ Z$ U. k+ tbuer(a,h,2);7 n- W7 Q0 m" z" n
printf("\n\nP的值如下:\n");) i( h' i, N/ | p$ t" G; y& ]6 k
for(i=0;i<h;i++)
# x' e+ O, [& I$ j. [ p. H T! m* Z7 k( m{
9 m8 c; ]4 Q2 V' h: m7 l3 {( u4 Rfor(j=0;j<h;j++)
! I$ J$ J, G, z: a4 ^{ ; {; w" r3 k% s) A6 U& J& N: Q
if(a[h][i][j]>1)
9 v9 f% ]3 z v+ [a[h][i][j]=1;
% p2 R5 M3 ~4 s6 X; g; R, Yprintf(" %d ",a[h][i][j]);# `0 N# R& M: E5 {2 Y- ~# j ~
}
8 _" Y2 K6 H. ~6 f. r( E( y( Tprintf("\n");8 l. `; K0 \( q
}: Y& ]0 k4 @9 K+ M# H: h" z# Z
printf("\n\n\nwarshall算法:\n\n");" }4 N3 H$ b( T7 |$ ]1 ?
, E9 S* e) z5 Y" Z" N
for(i=0;i<h;i++) //处理邻接矩阵A.转化成可达矩阵。% p1 Q9 s) q2 ^8 S# Y
for(j=0;j<h;j++) C0 L7 b1 s4 {$ `/ {* U
if(a[0][i][j]!=0)
9 D, M1 s+ Y3 i- ]# R8 }3 ra[0][i][j]=1;
. T. Z% L# X7 H+ rprintf("整理后的可达矩阵为:\n");4 u1 [# H/ M2 Z4 D
for(i=0;i<h;i++); z0 Z' {& Y" y3 }* w9 r2 B
{5 c% |" g) U d8 H. h7 J
for(j=0;j<h;j++)8 Z `; k, F% J
printf(" %d ",a[0][i][j]);
! m, J/ J) N/ O$ e$ Bprintf("\n");
# d+ w+ j; p4 j3 L}
7 }% B9 N( \6 jwarshall(a,h);' b* m8 j4 H; W6 m& M R" U
getch(); C+ m5 X* {2 q3 L* r
}
! Y; b0 T# _/ Z3 lint jisuan(int a[N][N][N],int h,int z,int i,int j)5 O" Z8 s# k1 Q; o# b0 |
{4 `8 A# e: J5 j6 [. N+ {: ]( k
int s,jg=0;
6 B% L$ [0 A- E" S+ S4 ~if(z==2)+ W B0 t" H+ G; X, H$ l9 B w* B
for(s=0;s<h;s++)+ a! g( ~" R/ x& @% v
jg=jg+a[z-2][i][s]*a[z-2][s][j];0 j7 K* T, B# A1 N% W- |
else ; s$ W6 x$ a: E d2 G2 ^& Y6 h
for(s=0;s<h;s++)
1 E! ^' S6 S* T( gjg=jg+a[z-2][i][s]*a[0][s][j];
$ z' l* h9 Y2 }! R0 m5 ^# q* vreturn jg; / F) T( R) v8 d. }' M+ Q! k
}
4 S2 `5 E! _# \$ B/ y9 zvoid micifang(int a[N][N][N],int h,int t)% t7 M3 L) T9 @7 N# {, z$ g
{
- ?2 @9 o) b" J6 N4 lint i,j,s=0;) s* P: p4 ^& Q; A* F; Y5 T
int z=t;+ k+ B& z2 e8 p; K) s3 |& e* |
if(z<h) //矩阵的值不全为零。3 b) O& u0 H3 e5 t9 H0 L
{
T! `9 d( F) D4 |9 Ifor(i=0;i<h;i++)
0 F2 I! `4 C; @% Tfor(j=0;j<h;j++)* j3 q6 j2 q: g, [7 E9 o7 P8 `
a[z-1][i][j]=0; //全部赋值为0!
' j" D" f2 z6 o& @1 l. M, z; Z# hfor(i=0;i<h;i++)
: L& `8 ] W8 q7 d% J$ d. a! gfor(j=0;j<h;j++)+ ~9 E0 X4 c8 O2 B1 U* y- U$ b/ ?
a[z-1][i][j]=jisuan(a,h,z,i,j);
* Q1 y0 d. e7 S: S+ d! T& C5 k( Bprintf("\n矩阵A的%d次方为:\n",z);, @9 U- b# b: L T8 i/ r# a
for(i=0;i<h;i++)
4 y/ a' `, z6 S6 u, i{
8 T. {2 @3 i. w3 [# }: nfor(j=0;j<h;j++): V9 B2 T2 g7 v4 y6 U4 _1 A1 d
printf(" %d ",a[z-1][i][j]);& [$ U0 g, U: Y' B
printf("\n");
) a# c5 r; m+ N. V2 I6 }0 R$ V}% ]- _- n% {3 p& ?6 h
micifang(a,h,++z);
q" e3 @2 F2 c3 [ s2 D}* D3 T( ^* W8 D( @
}
& K( R; g4 z& T* [/ _- |void buer(int a[N][N][N],int h,int t)4 |: P. @: R/ r0 {
{
' Z: @* ?" X: b5 O, {% Oint i,j,s=0;
; b8 v5 T* ?; \int z=t;' w4 m5 D' I1 b
if(z<h) //矩阵的值不全为零。
- s! H! j# P6 o( a$ h$ r: G! s5 @{ 2 E6 m ~% @( h5 x
for(i=0;i<h;i++)
/ v% x% g7 }1 o0 ?1 efor(j=0;j<h;j++)
. Z, M6 d* x; ?7 Q6 Ia[z-1][i][j]=0; //全部赋值为0!
7 z- V1 b b. t# t* w* ~for(i=0;i<h;i++)' ?" N) g' E- G7 L8 ~: `
for(j=0;j<h;j++)
5 a) I. Q" ]# d2 Z! }1 R. ~* Ua[z-1][i][j]=jisuan(a,h,z,i,j);
5 Z5 \% s; `2 j8 Z9 {3 e( hprintf("\n矩阵A的%d次布尔幂次方为:\n",z);, I4 e+ R1 {# j( ]% Q1 D; {
for(i=0;i<h;i++), }$ B/ |) h7 Q4 E+ o
{2 Y" l' Z/ j6 _7 H% f4 X$ b0 ~
for(j=0;j<h;j++)
6 m1 e+ b0 k- a' `$ K{
# e1 y" S" N2 V# z7 ~if(a[z-1][i][j]>1)
) U1 B- d; b* h3 v" E0 ea[z-1][i][j]=1; . O! k0 g" Y# k9 t! a
printf(" %d ",a[z-1][i][j]);
9 G1 G0 J8 I2 W# [, \3 T/ h) R B}5 {$ w$ t3 F( |5 }' L, c. K, N
printf("\n");
t4 B2 Q! c* L- G}
/ v4 H% x& D, J- |- Tbuer(a,h,++z);
1 x" u( t8 g6 U. M5 H9 r9 _}
. O) r: h" s. P1 [8 F0 S}% K5 O6 m" r9 R o: }8 i) _
void warshall(int a[N][N][N],int h); }8 [0 ?8 `; \6 J/ |. o s1 u% D. U
{
8 s2 X) o a" S7 s) m- L* e2 bint i,j,p,q,r=0,s;
! |' j. X9 a& g( C/ X. mfor(j=0;j<h;j++)
) G4 h6 V/ B5 X0 i2 H# ofor(i=0;i<h;i++)
5 e. j4 w, @: S$ ?' f5 N! }if(i!=j && a[0][i][j]==1)
8 o6 G; Z0 m4 X& t Y# t9 o{
1 R; s$ t' V, q) S H! qfor(s=0;s<h;s++), h5 |2 ~ t. R
{ . J' G+ `7 H# v3 t1 r
a[0][i][s]=a[0][i][s]+a[0][j][s];
# ?- i: z1 v& Y, o' Nif(a[0][i][s]==2)
9 B7 `2 h3 ^5 R7 s3 M j8 [/ ja[0][i][s]=1;
& {$ {! C( b5 R$ K2 S' ^/ m}
6 O! v% X; }( Z8 rprintf("\n第%d次运算的结果如下:\n",++r);
% C# ~* k) c2 B5 l+ N" y6 [* a) mfor(p=0;p<h;p++)
2 p$ b1 a- {) s8 X- I$ z{
( U3 s# g4 Y" t: F; H" Afor(q=0;q<h;q++)
# P4 k% ^! H* ]printf(" %d ",a[0][p][q]);6 I3 q2 w9 t5 v3 m0 B) c
printf("\n");
3 ]4 E0 A' N$ D/ h8 o* }5 u6 e}( Y- @; r7 Y9 R' e& R: B! [
}8 g! s! `& P% O" J' R2 i
} |
zan
|