- 在线时间
- 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 V; Y8 S z$ V s#include "string.h"
- b9 e& ~5 s3 z2 P& `2 S$ s#define N 50
* s; A# k% S& v8 W, H6 _int jisuan(int a[N][N][N],int h,int z,int i,int j);
& K; C6 }2 ?8 x6 z1 evoid micifang(int a[N][N][N],int h,int t);- _% j& P; A8 N0 A1 o
void buer(int a[N][N][N],int h);
! |$ e( y% n6 h! d+ c. H Y# evoid warshall(int a[N][N][N],int h);
# q6 u' K. Z6 h, Gmain()
6 {/ W% j$ t+ K4 n4 R{7 D3 C0 P; ^: _8 L3 D
int i,h,j,t;: n2 l/ D, E" W1 V$ R8 `( l
int a[N][N][N];9 O' L/ ]+ u y! x
printf("请输入邻接矩阵A的行数(或列数):\n");
/ K" A4 z/ U+ d- b$ a9 m, e& bscanf("%d",&h);5 {) y" i l$ _1 U/ b$ @
printf("\n请输入邻接矩阵A:\n\n");
+ H1 b9 u1 f' {% _8 [, r9 Afor(i=0;i<h;i++)+ x& }7 k6 n9 @/ f
{
/ f" e& p7 e, |printf("请输入邻接矩阵A的第%d行.\n",i+1);
3 E5 l5 x$ S* qfor(j=0;j<h;j++)9 C; k: O P/ q1 F9 E( i3 j/ V
scanf("%d",&a[0][i][j]); * n4 Z9 l+ {5 w, Y; H% K1 [
}* P/ |- V7 z/ h4 V4 w/ S
printf("\n邻接矩阵A为:\n");2 Z5 l0 @; q3 O1 H
for(i=0;i<h;i++)7 q$ `7 X3 I( i" }: Y, g }
{
* ~5 D" r+ P+ Qfor(j=0;j<h;j++)
, f# W- Q+ Q& L" E2 Iprintf(" %d ",a[0][i][j]);$ a7 W2 e- j& |7 i; a9 u
printf("\n");- f5 J* R5 Y8 i
}3 i" x2 `4 n n" V2 f! h" F1 v
printf("\n\n\n算法一:\n");
, O* `3 z7 j A! J9 Eprintf("\n矩阵A的1次方为:\n");
+ q% a( _0 g6 u) lfor(i=0;i<h;i++)
% H: Z) p8 w" b F& U, E4 M. K$ F" ?{+ j5 i J% I$ ]+ x9 }
for(j=0;j<h;j++). I# v) _9 @3 N: ?% [
printf(" %d ",a[0][i][j]);) f! [6 s7 d/ u+ `* q. ]
printf("\n");% C1 Z8 D+ T! R6 d' N# g
}
9 v0 O- F. D$ l, B! I8 Zmicifang(a,h,2);
+ ]- s) p9 W( h. z1 a- j: Z; ^for(i=0;i<h;i++)
1 m8 M2 p* C% h5 T2 H( b2 kfor(j=0;j<h;j++)
7 }' G; U& |: sa[h][i][j]=0; //全部赋值为0!
" y) B" T; } ?2 O. q% Gfor(i=0;i<h;i++)
% x+ K; Z$ r! ]for(j=0;j<h;j++)+ Q" i% Y5 p; x/ G4 O9 a
for(t=0;t<h;t++)
/ E Y3 g: ?" [& j* j6 z( pa[h][i][j]=a[h][i][j]+a[t][i][j];( g( Q8 V( u7 U
printf("\n\nB的值如下:\n");* \! ^; _$ U/ Y8 X
for(i=0;i<h;i++)& @) G4 q [5 @! u G' w
{
# _" M" Y9 B1 `: Y e/ U# s1 {for(j=0;j<h;j++)+ n6 t9 L, F( U, u% \. i# d
printf(" %d ",a[h][i][j]);
% ~& Q$ k% }3 B9 ]! I; rprintf("\n");8 m( U4 i6 i% y( d5 F: g
}
) E/ g. D w/ Yprintf("\n\n\n算法二:\n");
8 G) I4 ~7 i4 u! z5 f* K& _printf("\n矩阵A的1次布尔幂次方为:\n");
9 H8 p$ V2 D6 k" S3 v. N- G' wfor(i=0;i<h;i++)
# j' ?% x5 q: Q9 M9 Z( j; s{ v. A+ ?1 F9 D
for(j=0;j<h;j++)
0 K1 _; y( k) x8 K{
7 q# i* g3 \, W/ \6 |if(a[0][i][j]>1)* K y6 I! k) N" ^5 b) M) x4 v
a[0][i][j]=1;: P3 ]) u, F, ~5 r
printf(" %d ",a[0][i][j]);
' i& M3 a9 W7 U- y8 Q}! p$ U! `% h( E4 {( O
printf("\n");
" S ^8 E; ?& g4 g! C" N}7 ?" }; j% {1 _
buer(a,h,2);
, z$ u( @0 e% ^4 u. d4 ^" cprintf("\n\nP的值如下:\n");
, F( R4 k1 R& ?for(i=0;i<h;i++)! U( l0 g$ \- {- Z
{7 ~+ I! J) Z4 D( v
for(j=0;j<h;j++)9 b% p7 a; I8 V7 {
{
% k) L0 }/ U# \" h4 ?: vif(a[h][i][j]>1)% u* z* K/ x, R: ?& Y
a[h][i][j]=1;
1 w3 u7 \- D* v1 k$ ^printf(" %d ",a[h][i][j]);2 A$ q4 U) o. f
}
4 w& K8 ?: W' A5 Xprintf("\n");
! }! L3 e7 D7 @4 P1 R/ Z}8 _; D$ P0 H- f+ }" l. T. G
printf("\n\n\nwarshall算法:\n\n");
! a5 z3 ?+ H% q6 f
& p8 Q( c4 `8 Ufor(i=0;i<h;i++) //处理邻接矩阵A.转化成可达矩阵。
3 V' b7 y; k- v7 s; T) @, ]for(j=0;j<h;j++)
3 R. R' Z9 |, D3 K0 o0 B* c* jif(a[0][i][j]!=0)4 ?) J+ e' u6 T0 [ M
a[0][i][j]=1;
: o2 h* V% i" ]4 M, D' z+ gprintf("整理后的可达矩阵为:\n");
# a$ A1 a6 M# @" Afor(i=0;i<h;i++)
, ]# C- J2 ~8 C, W# B8 `{, `9 O9 \3 s/ r |" ^; h( Z
for(j=0;j<h;j++)' b& ^ t% x$ i; N7 U. T. X
printf(" %d ",a[0][i][j]);
* @3 K% n* C' H8 o$ v3 q6 Y- u1 Iprintf("\n");
# t0 \+ ?3 s: |* n8 l+ M}
2 ^4 L% q- N( H% Uwarshall(a,h);/ C$ i- S% H5 y
getch();1 o6 t4 w8 e8 v4 Z7 O2 {
}
" ^% S, y8 a7 C4 U' Lint jisuan(int a[N][N][N],int h,int z,int i,int j)$ v7 N/ m6 c; X
{
' t+ R7 f% }% e9 E) N! xint s,jg=0;
" r8 \4 {0 D% s: jif(z==2) \* h B' q; r$ ~: M
for(s=0;s<h;s++)! u2 y# i2 O" U8 J" U& q# w
jg=jg+a[z-2][i][s]*a[z-2][s][j];
; o: r; l& B' H Uelse
& v. c$ p" ^. i" R8 z ]5 Dfor(s=0;s<h;s++)2 n" c) h/ p# m
jg=jg+a[z-2][i][s]*a[0][s][j];
+ t2 k: q: C6 j- H4 oreturn jg; " a1 {4 a- p. R% q" I
}
+ U% H% |8 ?# c$ U4 s* tvoid micifang(int a[N][N][N],int h,int t)# V% @0 d, K; G% f0 P
{
! q$ j8 n! K" A% R4 g6 j( bint i,j,s=0;
& q5 @3 e4 |% E- n$ v* Q+ \$ {int z=t;; f+ ?, I) N3 c/ j$ U) j
if(z<h) //矩阵的值不全为零。7 F1 ]" v+ G4 c. `- j
{ % `5 A8 u1 y7 R! W8 l# U
for(i=0;i<h;i++)5 ] L( m5 v+ |+ g* e2 k: i$ A
for(j=0;j<h;j++)% v/ U5 P& J9 D+ B5 |! y( q: G' s
a[z-1][i][j]=0; //全部赋值为0!
b4 z1 x8 ^, }6 u7 wfor(i=0;i<h;i++)" e+ \' q( x/ M- n$ m0 b+ S
for(j=0;j<h;j++)
+ l; _$ m0 ?0 P! ra[z-1][i][j]=jisuan(a,h,z,i,j);+ j- R/ i H! O% F8 ~
printf("\n矩阵A的%d次方为:\n",z);+ J! C$ g6 j6 @
for(i=0;i<h;i++)
3 N" j% w' ]+ v# q- L/ ?- c# m{
/ r4 r2 [ V3 O4 m, J! K9 @- c# W; e tfor(j=0;j<h;j++)$ D7 o* e2 ], ^
printf(" %d ",a[z-1][i][j]);1 n% `& t0 ^) u4 j1 Y
printf("\n");8 d* [& \* j1 l" F+ z6 X" N$ C
}6 e6 Q; o! I4 b0 N# m5 k% g; g9 I
micifang(a,h,++z); $ {; R1 q y. s
}
v* T- R2 E* Q2 P. d+ j/ J6 {. [}: ^9 S: G' h7 I- q
void buer(int a[N][N][N],int h,int t)
4 Q) M- m6 `3 O# Q+ Y+ K, X4 y. U{
* c: Y' Z8 g& t4 q; v2 r) C2 ?# Iint i,j,s=0;: i$ O$ ~) ^& y3 H# \$ U L& M
int z=t;
1 y$ }5 b8 H/ U1 r9 [) \5 mif(z<h) //矩阵的值不全为零。9 B$ p* c$ u. o3 _
{
: G: D+ J, r& b0 bfor(i=0;i<h;i++)
0 i7 I! d W5 B6 g' `for(j=0;j<h;j++)4 o9 @$ K8 S3 B, \/ \
a[z-1][i][j]=0; //全部赋值为0!' |7 d4 _0 Y1 ^
for(i=0;i<h;i++)
6 b% d- Z# |3 X( V' K5 [/ ffor(j=0;j<h;j++). K: r2 [7 V2 a1 {
a[z-1][i][j]=jisuan(a,h,z,i,j);; D; O# i7 ^' B' s
printf("\n矩阵A的%d次布尔幂次方为:\n",z);/ N5 G9 s h, u! R! e
for(i=0;i<h;i++)/ t% }6 r2 A! I5 p
{
7 h1 x+ D9 i2 L& N5 w0 ]3 ?for(j=0;j<h;j++) }$ M# M- }* M; q4 H" V/ p
{
9 r, y9 [) R2 Bif(a[z-1][i][j]>1)
0 y+ F {3 g) r" z* @( D$ wa[z-1][i][j]=1; 7 I- g) P) ~) M6 D8 [+ O
printf(" %d ",a[z-1][i][j]);" V. ~7 X3 W( o) i
}
4 i8 l* u) b1 Q* K& M Dprintf("\n");
4 m4 M* v0 o) I8 \5 Q: U8 y/ [4 f}
% l/ R4 u7 c9 abuer(a,h,++z);
$ T4 R. b& ^& x( I9 v9 J( ]3 [}3 c9 ^3 S5 ?. r4 D/ t" t
}
. ~/ O, n% E4 n) I5 R% ^* `void warshall(int a[N][N][N],int h)6 E9 y# W. q# e1 `, `2 M
{
* O Q- _2 k- i Z3 v: kint i,j,p,q,r=0,s;
7 }/ m6 n: w" U" h0 I5 g6 {for(j=0;j<h;j++)
% D' Q+ n+ q/ x8 Tfor(i=0;i<h;i++)0 M+ K, V' R: W! P( W# l
if(i!=j && a[0][i][j]==1)
0 Q" Q5 M N/ e d# ]+ y- v+ r{9 t" h; ^: _% i" V8 X
for(s=0;s<h;s++)
! D2 ^! L& }7 Y( ?0 N' T; A, v% e: Z{ + R3 b( {9 m& H" ]; m
a[0][i][s]=a[0][i][s]+a[0][j][s];
3 D. p- ?3 I; F5 y3 w) wif(a[0][i][s]==2)
0 s: M+ _. M; T" Q8 l7 }: ba[0][i][s]=1;
?2 L- O0 M( s6 W: H: b}
' j5 v# w2 u8 |! p; m/ S* ?/ @printf("\n第%d次运算的结果如下:\n",++r);
' U# `% x7 z- p( Wfor(p=0;p<h;p++)
+ n* U C1 ~3 j4 F8 V4 _{
# S9 L4 a' e/ yfor(q=0;q<h;q++)
" k8 o- d, Y- s5 @; fprintf(" %d ",a[0][p][q]);
; T2 f, B3 ^; \printf("\n");
9 E7 U5 r$ K0 O9 Y8 B+ M}
( w4 Y" w" v+ @( m& Z/ o}
& N1 M( }8 `/ S6 x7 U C0 @} |
zan
|