- 在线时间
- 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"5 ^6 w' P. e8 y
#include "string.h"7 o! i6 N5 W5 V- x3 T3 ]! R
#define N 50
# I) R+ n1 ]0 R* l% m1 i Vint jisuan(int a[N][N][N],int h,int z,int i,int j);( B! Y, h" t0 [, N
void micifang(int a[N][N][N],int h,int t);
+ D) u! S& p' [void buer(int a[N][N][N],int h); f" b5 U. `) i1 y
void warshall(int a[N][N][N],int h);
a! c$ W$ D' W$ L- Umain(); T2 B+ v. h$ w9 z& b
{
2 i6 e' C8 w! X ?% Z- Q) @ Bint i,h,j,t;# v, C3 u4 \3 S: Z
int a[N][N][N];. P8 A. L ~/ M& N" X# N
printf("请输入邻接矩阵A的行数(或列数):\n");
- Q' n3 b, p) p0 l/ Z+ H$ Yscanf("%d",&h);3 x. u& C9 G# L H( I' s/ {; b) @+ e+ A
printf("\n请输入邻接矩阵A:\n\n");
; B v8 ~6 V$ n: @) Ufor(i=0;i<h;i++)) [2 t5 O. W b* T" d
{' u; p6 ^7 ~) p- F2 p+ f7 _ C
printf("请输入邻接矩阵A的第%d行.\n",i+1);- l8 }( S8 G- @+ V, ~ L
for(j=0;j<h;j++)
6 B: }9 O1 K$ s$ Zscanf("%d",&a[0][i][j]); / C6 }' }& h. J U/ K, L4 Y1 ~. L
}" q0 ^% u z Y5 S7 s3 a# c; _& X; u
printf("\n邻接矩阵A为:\n");1 h8 K0 P2 G1 W& _
for(i=0;i<h;i++)
0 _8 S& t+ j" Z$ ^7 t2 M/ A{) [6 K x) p/ f& n5 L/ s
for(j=0;j<h;j++)1 j: y3 z. u- `
printf(" %d ",a[0][i][j]);5 L! d b# @" R# u' ]' a
printf("\n");$ z- X$ h# K+ U* T4 m- j
}
) M- C1 t! q7 w$ c8 m/ @printf("\n\n\n算法一:\n");$ O, d7 K }. x9 X( ^3 S7 f0 T
printf("\n矩阵A的1次方为:\n");
! Z* l+ b. S+ x+ Hfor(i=0;i<h;i++)' \! O2 n( r3 r$ G. B$ F6 Z& ]3 n
{
' [" e7 X2 h8 E- e, W4 rfor(j=0;j<h;j++), G2 [; s+ T4 Y8 [4 c3 @6 B
printf(" %d ",a[0][i][j]);/ j2 t: I; C& [. @3 t2 a
printf("\n");
) @0 _0 i5 [: m o}' V$ p y$ _* t8 w q. G
micifang(a,h,2);
6 t. Z; P* i" J3 p. `for(i=0;i<h;i++)
# P5 R! R+ _$ r9 L/ U9 Jfor(j=0;j<h;j++)
. s* E0 b( @+ }a[h][i][j]=0; //全部赋值为0!
1 Z" b7 Y. W) _1 ]1 f9 s: [. nfor(i=0;i<h;i++)% i# ]4 f: L! ?" q9 f+ Q) X
for(j=0;j<h;j++)
4 C( m D1 O) s0 b. Efor(t=0;t<h;t++): r1 w9 q1 c5 A
a[h][i][j]=a[h][i][j]+a[t][i][j];
7 {' x& G9 s7 I( e' t, Cprintf("\n\nB的值如下:\n");
* ]4 N$ k5 p/ }/ z; i6 U7 `8 Pfor(i=0;i<h;i++); } X/ b( {" m8 h( ^
{
7 R0 Q# J9 U: ^; S- z6 c, Afor(j=0;j<h;j++)5 m t& D. W: c0 i
printf(" %d ",a[h][i][j]);
& [9 @9 K$ i" m: @* P" B# Hprintf("\n");, X2 }+ ]9 \4 m2 M. L. _% M
}
+ J/ \- _7 H- \& |8 i$ H' o* yprintf("\n\n\n算法二:\n");; k, e) s0 H1 e. s9 v
printf("\n矩阵A的1次布尔幂次方为:\n");% P1 o2 }2 w/ d0 d: c) m: r- I
for(i=0;i<h;i++)+ D( M- D; _' T Y
{
0 r; C! w7 c: }7 b% Rfor(j=0;j<h;j++)
6 @+ w* G& p, K4 g{
$ Q4 c0 Y; J1 U+ G4 jif(a[0][i][j]>1)
/ m3 R5 P% [: I$ w( pa[0][i][j]=1;
2 l+ q6 {- S qprintf(" %d ",a[0][i][j]);
4 z" J8 o1 @1 i* n0 C) F}
; {3 V1 j* J& ^0 _. x6 u; Aprintf("\n");+ Y% o. E: L* X( U0 s
}
" H! `. \. v' V9 u1 @buer(a,h,2);- j! X0 D6 \2 `" X J
printf("\n\nP的值如下:\n");
; l3 T; h9 y3 u* I+ C! N# r3 C& h. q3 gfor(i=0;i<h;i++)4 t6 j# O7 m( I9 C
{
4 {1 J% K2 t# t0 u7 D& Ffor(j=0;j<h;j++)
; }! w: t, z+ C, |' k+ H+ h8 C{ 7 q- k0 @ O8 }" ~% }6 E, x' D. G
if(a[h][i][j]>1)
' V, m# N y/ w3 |a[h][i][j]=1;- A& h% r! j7 \+ `* L
printf(" %d ",a[h][i][j]);; l, ^) |" \1 V$ j
}. n3 ]9 S6 m" E& Z0 g4 h w
printf("\n");$ }, V. b# c7 Q" V9 \9 X
}
& v g6 E' S! e8 l1 ~printf("\n\n\nwarshall算法:\n\n");
7 x) p- H6 a) w% m) ^ v+ _1 q' Z7 Q/ m* Y1 G6 W4 N L
for(i=0;i<h;i++) //处理邻接矩阵A.转化成可达矩阵。$ X9 P5 s' b( `
for(j=0;j<h;j++)2 E* S$ Y0 y( Q
if(a[0][i][j]!=0)+ y- z" K4 `' m+ U! _" u/ P
a[0][i][j]=1;
) V; F, z, U& o4 }/ y7 Q4 Xprintf("整理后的可达矩阵为:\n");
* T9 W, l& p/ y; M$ M. T0 D5 a6 xfor(i=0;i<h;i++)
) R5 g& c5 [$ X{
, n6 a @6 [7 r" K% i/ _1 `for(j=0;j<h;j++)
# a8 v9 E& Z! u4 U9 o c7 M% Nprintf(" %d ",a[0][i][j]);
2 T4 N. R0 A! M. M1 G$ gprintf("\n");! q6 e$ G; w+ W# q
}, o, N; l+ H, v; D
warshall(a,h);4 d( V+ A# }" D5 ?" o$ F
getch();
; L$ `: M& d7 K: H7 Q" X. F}5 X$ W' @) @" m4 D0 ^$ Y
int jisuan(int a[N][N][N],int h,int z,int i,int j)
- m/ i# F9 e3 e. A. [! i{
9 ?; |( D' Y4 b$ K$ A% vint s,jg=0;/ ~. ^' X& L& F, W" o. H
if(z==2)7 R- A/ b2 C2 x# h. d
for(s=0;s<h;s++)
7 ~; z# J! a2 ujg=jg+a[z-2][i][s]*a[z-2][s][j];! k' M8 I/ x( k0 ? ]% k
else
/ Y! [, C. k; P9 x5 e1 G' Xfor(s=0;s<h;s++)
. `, P/ l+ a& G9 ijg=jg+a[z-2][i][s]*a[0][s][j];8 `7 i2 j$ K# |* ~5 Y
return jg;
% Z( C- T1 d3 V6 h4 G& U}
. n8 f: Q& H; i8 L) A& D5 Evoid micifang(int a[N][N][N],int h,int t)
% B' \0 w. L! a) u8 d6 Y{
* g Z' Y6 z n8 o/ uint i,j,s=0;! \+ c+ T. h2 r+ ]; b
int z=t;: f1 _' I' z8 l
if(z<h) //矩阵的值不全为零。
% K# m$ ^3 b" K% v{ 0 j# m8 o1 v- Y9 U% {! R* F/ r
for(i=0;i<h;i++)/ u8 J% k; p( ]0 B
for(j=0;j<h;j++), M3 k0 E1 l x- U( \6 w* K% ^% w
a[z-1][i][j]=0; //全部赋值为0!/ z7 T; L a4 d7 y/ x5 O4 B
for(i=0;i<h;i++)( L, C3 T" L0 Y6 k/ p7 c
for(j=0;j<h;j++)- s% D+ {, `8 e" \! l! a
a[z-1][i][j]=jisuan(a,h,z,i,j);( ^+ h* @# I' y+ b
printf("\n矩阵A的%d次方为:\n",z);
6 c8 p; V: Y* tfor(i=0;i<h;i++)
; {- z# `% c/ y: G{
; L( s: R2 s* `+ rfor(j=0;j<h;j++)
7 p6 p9 t% @* Dprintf(" %d ",a[z-1][i][j]);
% F0 s1 O5 F- i0 sprintf("\n");
( H0 F6 t, G# n}
! e6 l6 ]# w0 Z; u6 M( _5 z! Q# wmicifang(a,h,++z); ) H+ l( i8 Z( l0 l$ f. s% E( Q
}, @5 K" [' }- R% G- P
}5 A5 z( I2 o2 e$ i- B
void buer(int a[N][N][N],int h,int t)
2 Y Y& i: J5 A6 q, o{
3 z' V' ?: {' r5 `# Mint i,j,s=0;
' ~6 i$ ?8 F; x" N9 Vint z=t;- R* ~# `, n( ^: B
if(z<h) //矩阵的值不全为零。( h. O9 E- h, k, H
{
3 O. l M* S$ [8 z# }# ?9 a( rfor(i=0;i<h;i++)
+ L# ]2 Y9 O! S7 I# J* V; y2 Lfor(j=0;j<h;j++)4 a: u. l# u$ s6 p9 q% }
a[z-1][i][j]=0; //全部赋值为0!
/ Q/ ]& ~2 g) f# ^/ [; x% O% Jfor(i=0;i<h;i++)
* i. I7 B4 b+ o1 L8 E! L% ufor(j=0;j<h;j++)
4 y; f* ?+ k/ n ua[z-1][i][j]=jisuan(a,h,z,i,j);: C7 s* B4 _& i S6 k
printf("\n矩阵A的%d次布尔幂次方为:\n",z);
8 p7 w0 t+ d" t: ?. _8 ~for(i=0;i<h;i++)' d4 z3 g( l3 @
{7 `2 b1 I) c/ a% x( {
for(j=0;j<h;j++)6 [3 h* ~5 ]5 \( U( x0 L8 {
{
+ a' n6 f9 w+ q% rif(a[z-1][i][j]>1)
- z# R$ F! X& N: U1 e, ]" Va[z-1][i][j]=1;
/ C7 X, e( E, }% Mprintf(" %d ",a[z-1][i][j]);9 f6 `+ r6 k# W f+ l
}* \% g- I' ]& k) c
printf("\n");2 |6 q, l1 q' |
}) R, v9 S: M3 X9 [ w+ U' r6 T
buer(a,h,++z);
3 x9 C7 m" M0 f! I3 {6 _}2 @1 O3 G0 m6 Y6 l& d
}, L1 P2 k" s- H
void warshall(int a[N][N][N],int h)
' j5 W1 J8 a8 H* A8 F{: ^/ v1 H% l. p& C: E) e: v) u
int i,j,p,q,r=0,s;
9 ?" G7 |8 B U8 A7 P9 e! J+ L/ mfor(j=0;j<h;j++)
% S0 j, y7 x1 q9 n$ bfor(i=0;i<h;i++)% r5 V7 s! ]$ l9 H1 Q
if(i!=j && a[0][i][j]==1)
. d! M Y }) {# F) A3 X. D# u1 k+ Z{
1 h5 C. y+ E8 }5 R# i, e& xfor(s=0;s<h;s++)& r3 x3 `/ K8 a" `5 F, A7 _! R
{ 9 P, U: ?* \# H/ Q* \
a[0][i][s]=a[0][i][s]+a[0][j][s];0 n% @- m, l5 A& c
if(a[0][i][s]==2)
! N3 G- A/ W! g( c2 Ma[0][i][s]=1;
8 r2 `4 T. i: N}
- |% o( f! d" M6 _printf("\n第%d次运算的结果如下:\n",++r);& v: u( D2 L8 B1 I, G7 R0 [
for(p=0;p<h;p++)9 {: E4 c( N" G- Z
{
2 G" N! y& G. X4 T! T3 I- D' Gfor(q=0;q<h;q++)0 ^! i( k" z- _1 i& P, p+ I
printf(" %d ",a[0][p][q]);
( ]: [/ b1 Z% u. p q- Xprintf("\n");
" L# R, V1 N( C}$ |* }, c! A8 K# z3 i$ k
}
( V8 o; Z8 q: v0 \8 f D} |
zan
|