数学建模社区-数学中国

标题: 求教高手啊,C语言改matlab。帮帮忙,感激不尽 [打印本页]

作者: chenhande    时间: 2012-4-11 18:03
标题: 求教高手啊,C语言改matlab。帮帮忙,感激不尽
#include "stdio.h"
4 T. u; u' E& m/ {. L7 J#include "string.h"
/ h/ W5 m  G/ ]7 U#define N 50 $ P. f: b- B4 I& J, k$ C
int jisuan(int a[N][N][N],int h,int z,int i,int j);
" b" I: [% _3 Fvoid micifang(int a[N][N][N],int h,int t);
1 I/ @4 n/ N" N4 N4 r9 hvoid buer(int a[N][N][N],int h);
$ y7 _- O9 E9 A8 c9 a  s# h9 }void warshall(int a[N][N][N],int h);& Q9 M1 K- S8 [; ~% c, u
main()% {6 G6 A( h5 C  G) Y$ k9 N- a% V
{8 x8 I$ x5 P! \! j3 n8 J
int i,h,j,t;8 E0 Y& r- \' ?  E( s5 ?
int a[N][N][N];
- y, |; ?9 w0 E# l* ~4 Lprintf("请输入邻接矩阵A的行数(或列数):\n");0 z/ ~# I- c* f
scanf("%d",&h);9 a3 j% G7 q8 h( D, l
printf("\n请输入邻接矩阵A:\n\n");
1 r/ C! K% w2 `3 V- ^1 S3 o  Dfor(i=0;i<h;i++)/ Y: o9 U6 Y" P% O+ ]# R6 G- X
{
+ y3 n+ o/ o; i' z9 Dprintf("请输入邻接矩阵A的第%d行.\n",i+1);8 y7 K' U& b8 U' ~/ H! [
for(j=0;j<h;j++)
% `' j/ C' l6 dscanf("%d",&a[0][i][j]); & T! T5 S: l; j' t. d+ o/ s
}
# s2 [6 E  R* Z% Zprintf("\n邻接矩阵A为:\n");
/ D; c9 @# i/ @for(i=0;i<h;i++)1 L2 v* s5 k1 T" V7 x7 R/ ~
{
2 o  H" a$ M+ g" D+ Efor(j=0;j<h;j++)% m. d9 A6 X+ g9 k% ^6 [7 p9 m
printf(" %d ",a[0][i][j]);
5 d% Q  J. R0 V! g$ Eprintf("\n");
- s. `: C% O. T$ s- {. f8 k2 D}
+ f) N8 }- Z, @! g- @printf("\n\n\n算法一:\n");
6 G+ I5 `3 w+ j' z1 s$ Uprintf("\n矩阵A的1次方为:\n");! G7 M  V9 @9 N
for(i=0;i<h;i++)
8 c) j2 R; j1 X$ l{
( S3 ~- E- @& tfor(j=0;j<h;j++)
; q" e- \0 l, a2 G% c- M1 Aprintf(" %d ",a[0][i][j]);- i! Z$ E+ w6 I+ P9 v0 c# u6 {6 |  w) J
printf("\n");
5 m! N9 E( D* `/ f4 R% v}
8 }: J+ a: g) w: {micifang(a,h,2);
5 O2 \* o. Z5 H  n8 `% ^% ufor(i=0;i<h;i++)# l: w; |4 x- u
for(j=0;j<h;j++)5 k5 J, Y  k! i+ P0 H
a[h][i][j]=0; //全部赋值为0!
, V, D! M0 C( Z5 v' ofor(i=0;i<h;i++)
( w. [4 g( U4 ?  H/ Yfor(j=0;j<h;j++)( L6 |2 U8 }8 _' b4 e: V  r
for(t=0;t<h;t++)
" l, e4 ]* v- p+ k! M- Aa[h][i][j]=a[h][i][j]+a[t][i][j];: S, {2 W3 W2 K$ s9 D" m
printf("\n\nB的值如下:\n");
7 t& T" O2 i. v8 h. T' U+ _4 Jfor(i=0;i<h;i++)
) [: t3 p6 [6 P/ K& F) [. Z, A{1 E9 _" g' w: t& k
for(j=0;j<h;j++)3 P, i1 u$ v  j. n. b- B1 U
printf(" %d ",a[h][i][j]);
& i. u9 A  L) l  r4 P  Y% Wprintf("\n");: V5 v1 g! d/ C  H
}; o( O, g$ R2 T9 Q2 Y% r! {
printf("\n\n\n算法二:\n");! `8 ]$ c0 S$ h7 C5 B4 S) V; i6 H
printf("\n矩阵A的1次布尔幂次方为:\n");
2 S1 y4 B& m+ nfor(i=0;i<h;i++)
9 w8 A/ O  i- D& l5 K/ Y, M4 c( G{% X# T7 O' Q+ w6 x8 D0 k$ V+ y
for(j=0;j<h;j++)
- a& \5 @6 n6 |' {{
& z- [+ M  C0 ]- Rif(a[0][i][j]>1)5 j$ n5 F6 Y4 d& g
a[0][i][j]=1;4 N( y  [# h& X) m9 O7 t7 ]5 f6 N
printf(" %d ",a[0][i][j]);
) b) W$ s# a) o5 `% ~}
. O9 t; G( P! mprintf("\n");) J6 C0 ?+ {& d  f0 s$ a
}5 g$ y  W! r* Q
buer(a,h,2);
. Z2 k1 v& |6 A, T; V- v* hprintf("\n\nP的值如下:\n");
8 H- s# Q/ S9 P) J) pfor(i=0;i<h;i++)' G8 n4 _" \# D5 A
{$ z+ @& k" p3 G6 N; I% _) l( b4 |
for(j=0;j<h;j++); ?, L6 i7 n( @, R
{
( P2 k- ~  b, @" ~" _( E. `7 Nif(a[h][i][j]>1)
' w! z3 {4 a+ U7 E% na[h][i][j]=1;" K: C0 R" a. e# C" P" R
printf(" %d ",a[h][i][j]);
0 O# s1 |- z% m8 u% e; W}
0 Q. V) S! `, rprintf("\n");
. }3 Z7 Q' C( Y% A9 m7 a}
& ~* v$ j0 B6 v5 Cprintf("\n\n\nwarshall算法:\n\n");) E; A" H+ U' P0 w
$ ]6 y  ^  O7 Z6 l
for(i=0;i<h;i++) //处理邻接矩阵A.转化成可达矩阵。1 o/ g* g/ b# F4 `( i
for(j=0;j<h;j++)4 B, x: O5 d6 e4 ^
if(a[0][i][j]!=0)
8 V' H" |, W8 s) u& t  @" ka[0][i][j]=1;/ l% B+ w: }( v3 ~- C# K
printf("整理后的可达矩阵为:\n");2 a, N) f1 ~% V+ c3 U) P) k% v, R
for(i=0;i<h;i++)' a0 q! ]0 V( H& J& K0 L5 Z7 i
{
" ]6 d( M& q1 w! `( Y0 Rfor(j=0;j<h;j++)) g/ B7 F* U  m* |3 a7 i
printf(" %d ",a[0][i][j]);$ m! L3 f' G/ C" Y
printf("\n");! H- d" q" c7 v  ^# l2 J
}
' J& M' N9 P9 Q: Swarshall(a,h);4 G7 Q1 o7 O: {. ^/ K% ~* j
getch();
. v! Q! b- k, X9 R$ p" ^}+ P/ p3 ]" M. M. Y7 t
int jisuan(int a[N][N][N],int h,int z,int i,int j): J% \8 e0 {  W7 q
{
7 _2 a) }. `0 _& Z# [int s,jg=0;* x+ q5 q6 k; a. i) l  ?8 z
if(z==2)7 ]4 j+ u* C: Q, X
for(s=0;s<h;s++)
- L+ W8 w5 A% E# x1 p% v% W2 d/ Mjg=jg+a[z-2][i][s]*a[z-2][s][j];" G" I' Z* V8 q5 {
else
7 @: J( H6 k, W- _for(s=0;s<h;s++)
/ Y" H& d; w5 u; ], |- ^5 Jjg=jg+a[z-2][i][s]*a[0][s][j];
# ?" E& Z) ^5 ?% e8 u' Q8 Vreturn jg;
7 Y& {* N9 K1 v}
5 _3 C( m  X$ Dvoid micifang(int a[N][N][N],int h,int t)! ~: u" q0 p, E% B+ h( n+ N
{) e. V0 T, v* i6 v
int i,j,s=0;( U3 O* J' [1 t; l6 R
int z=t;- H3 E! ~0 Y, t. d5 [4 }0 ]
if(z<h) //矩阵的值不全为零。" }! z8 ~5 u2 e) ^5 ?
{ 7 r0 J" Z$ M: z
for(i=0;i<h;i++)
) q" f5 l: I/ s9 S$ Qfor(j=0;j<h;j++)/ L3 T7 T8 v) p
a[z-1][i][j]=0; //全部赋值为0!/ Z: h/ _, R  x1 n( u
for(i=0;i<h;i++)/ J1 S' G; E6 |9 L% ?
for(j=0;j<h;j++)  j( J# Z0 d! G% d+ o
a[z-1][i][j]=jisuan(a,h,z,i,j);. m& G% \- r1 p4 q, D6 @5 u! p
printf("\n矩阵A的%d次方为:\n",z);
* _9 G% j0 t7 wfor(i=0;i<h;i++)
. a8 y/ E& s7 `' K: ]  }{8 ~8 T5 T  z( v$ U
for(j=0;j<h;j++)
% s0 O! n5 N+ _. W1 r/ vprintf(" %d ",a[z-1][i][j]);' ^4 v/ E; @( G8 `6 W1 N4 ]
printf("\n");
$ {1 G9 s0 J  [7 _* u}& T7 P1 Q- X( k% k' L0 X
micifang(a,h,++z);
# L4 ~/ M2 j  P8 g* i- ^}
& b$ {9 f/ ]/ R! @+ O6 B9 |}
" V' k5 h5 h; x2 V% d( d! A4 kvoid buer(int a[N][N][N],int h,int t)
. k) H7 Q6 T4 c{, Y& ?& E0 |% S4 v* n1 J
int i,j,s=0;% V% t3 T9 }# B8 F+ ^6 D$ w
int z=t;
5 m  o/ \$ j( \if(z<h) //矩阵的值不全为零。
* W( s- q& N, H0 B# o0 i{
3 `. |4 Y: y  v( [9 n% B! L* A3 l6 o4 Hfor(i=0;i<h;i++)% \! f, L" [# g! p) j
for(j=0;j<h;j++)
; x$ ~- ^5 A, e4 Ta[z-1][i][j]=0; //全部赋值为0!9 T: E3 l4 E1 ~7 v2 I2 s" l
for(i=0;i<h;i++). j. O) N& Q( @  ]6 ^- C4 m+ ^7 b8 U
for(j=0;j<h;j++)9 O7 ?, M% W0 ]5 g) h: L9 L( H
a[z-1][i][j]=jisuan(a,h,z,i,j);
8 m3 Z2 |$ v; m' Z9 L) u( d& rprintf("\n矩阵A的%d次布尔幂次方为:\n",z);) ~7 n7 x: i( ^* v) L7 ^% h( P7 @( W* M
for(i=0;i<h;i++)
8 y/ ^& c& c" M1 q. E* }% [  ^" k: `{
5 s% J: E# Q2 t; S4 qfor(j=0;j<h;j++)6 R5 y! g. A; w6 S" |/ F
{
8 L% |3 F+ u7 qif(a[z-1][i][j]>1)( j% u5 Q7 u  f* `! \
a[z-1][i][j]=1; ) Q9 ^4 j7 D' [* z
printf(" %d ",a[z-1][i][j]);; h: h# c  ~8 k' e* Q2 o
}0 b9 i. j. R: @9 A& R6 X
printf("\n");
7 v/ S8 y. t) @- I6 Y' C}/ f" g# t2 K# W2 e8 L) o4 n8 a
buer(a,h,++z); 2 O7 n5 i( k8 b6 I% }, S
}
5 T) G* E# e- ~}) w& {: n6 M7 W/ W, }- i
void warshall(int a[N][N][N],int h)
- C. [  n" G7 v: l4 l{* B, s$ }& y) U4 v
int i,j,p,q,r=0,s;
0 m2 c. x) w+ b9 m, Lfor(j=0;j<h;j++)
' R, S3 c- n6 B: \* M# e) Y: hfor(i=0;i<h;i++)
( n: ], K* i2 I. |if(i!=j && a[0][i][j]==1)- o6 \- C5 x' M" O
{3 l5 h: `  W0 i1 {
for(s=0;s<h;s++)
/ f0 K0 ~" u7 \{
$ H/ [8 Y1 B- X. j8 La[0][i][s]=a[0][i][s]+a[0][j][s];. M. @4 K, U, `
if(a[0][i][s]==2)
& y2 ~! V5 n3 x* S" v" f) E7 sa[0][i][s]=1;/ f, s! {* i0 b* J
} 9 K. o) j, C0 c; b/ ^2 T
printf("\n第%d次运算的结果如下:\n",++r);
) M) X8 a3 ~# p  h4 P2 Wfor(p=0;p<h;p++)
% u% }2 o' J- Y" V, L{
" |& }* k" ?% t; B' Z( @for(q=0;q<h;q++)3 A& n% u3 o& h
printf(" %d ",a[0][p][q]);. b8 Z  ]2 x7 |9 O; [% h8 u( V
printf("\n");
. q: c+ Q6 P; H# ^}
/ @0 ~% O0 {" Z5 A; G5 [/ r}
8 m- i7 u1 O# q: f6 J9 ^3 V4 t! {. `}
作者: lizhaowei1990    时间: 2012-4-11 20:25
先点一点这个是要干什么?




欢迎光临 数学建模社区-数学中国 (http://www.madio.net/) Powered by Discuz! X2.5