数学建模社区-数学中国

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

作者: chenhande    时间: 2012-4-11 18:03
标题: 求教高手啊,C语言改matlab。帮帮忙,感激不尽
#include "stdio.h". I1 j+ y9 }; N4 L6 _! J
#include "string.h"
  W+ l. I8 Q" l#define N 50
1 r' o) A6 I, Q6 L  L/ oint jisuan(int a[N][N][N],int h,int z,int i,int j);$ j! X: ?8 k1 c3 x5 w
void micifang(int a[N][N][N],int h,int t);% [5 f( ]+ `% |, v3 `
void buer(int a[N][N][N],int h);. Q  f8 S5 {) P. n! W8 a
void warshall(int a[N][N][N],int h);
6 N0 E9 Q6 j' K0 P. Y1 t7 dmain()5 M2 o; l  [0 Q- q. a
{' k& h8 N# I1 V* m3 i4 ^9 c
int i,h,j,t;
$ O/ t, M  A2 H" R; c" Eint a[N][N][N];6 z' Q' w2 U' B& u3 y
printf("请输入邻接矩阵A的行数(或列数):\n");
3 @& s* d) B& ~, Oscanf("%d",&h);+ F, D" O' T4 B" J1 T) y& A( q
printf("\n请输入邻接矩阵A:\n\n");3 L2 k( N9 q9 c$ ]/ B
for(i=0;i<h;i++)* `0 C% |8 |- [2 c
{; ^& W7 R1 J, v# e
printf("请输入邻接矩阵A的第%d行.\n",i+1);
7 Q- b4 G4 F: w1 rfor(j=0;j<h;j++)3 R' E4 m& P* G3 w
scanf("%d",&a[0][i][j]);
% m; ]. t, G# U}1 C+ g$ T1 |# x/ `, D, p
printf("\n邻接矩阵A为:\n");
: Z, l( l6 d# Tfor(i=0;i<h;i++)9 s$ ?# x/ \5 N9 K# ?$ W1 ^
{; b( g9 Y3 |* y7 }8 ^8 K+ p1 u
for(j=0;j<h;j++)
# p( M4 \& S- k( l: T! N6 Aprintf(" %d ",a[0][i][j]);: a. `/ S% w% f# J* U
printf("\n");7 C8 |9 H3 V6 s$ @' t" w# A% b) C0 s5 H
}
) L% Q- |4 @0 B" _  ~! yprintf("\n\n\n算法一:\n");
- l2 q- l* E/ R7 }: Zprintf("\n矩阵A的1次方为:\n");2 v7 k; S- r5 ^/ d; [5 E+ i. n
for(i=0;i<h;i++)7 o: k2 {  V5 `5 A( H7 ~( U2 C: L( ~
{
- j5 I4 e1 d( C( ?. ofor(j=0;j<h;j++)
9 i4 y2 j% C( dprintf(" %d ",a[0][i][j]);/ ^* F: }% e% x% u7 G) K. C
printf("\n");$ J0 R' D6 Y: R7 V/ b% @/ L9 H; p
}3 @- H4 s9 x& {( O% t
micifang(a,h,2);
$ P+ |$ @+ [8 F5 j! R  P4 y7 mfor(i=0;i<h;i++)
( Z% w1 K! t/ U* x# qfor(j=0;j<h;j++). `% j  u; Y) }9 @, b% ^+ K
a[h][i][j]=0; //全部赋值为0!3 _/ \( r# B' L8 V) q2 E: f& d2 z
for(i=0;i<h;i++)6 P0 V- K( U% I- I
for(j=0;j<h;j++)
$ s- i2 O+ [, D% T+ V( W, e4 Afor(t=0;t<h;t++)
0 E" ]: I" ?; u" }# za[h][i][j]=a[h][i][j]+a[t][i][j];
* M2 u0 }* X9 c! G' ]1 kprintf("\n\nB的值如下:\n");- m) B' E- f6 }" T" m+ B
for(i=0;i<h;i++), v. p0 t+ l1 h; R- _+ U
{* `' y% J$ X$ {# _) J0 f: M5 |7 V
for(j=0;j<h;j++). r( n9 a9 t1 V
printf(" %d ",a[h][i][j]);& g6 B& G2 O6 [& z: q/ P, O
printf("\n");/ \7 h& `. x* k3 g5 e5 b& \4 W
}) Q* ~+ e1 W* D9 g9 y3 G
printf("\n\n\n算法二:\n");
3 Z, E7 _% o0 a) @% Sprintf("\n矩阵A的1次布尔幂次方为:\n");6 t# K" n+ D2 m9 P" u# k0 D
for(i=0;i<h;i++): U: P2 ?, ]# \1 W- h& z
{
7 m4 I) w! w+ ]# q0 jfor(j=0;j<h;j++)% L& v' H* B7 b, }8 H' Y
{. h" L3 b; Z& p8 ^( ~
if(a[0][i][j]>1)
. o2 ^/ I6 Y" }5 d- H: Ia[0][i][j]=1;" m( p2 x$ f# ^& n7 Y! B! w) B
printf(" %d ",a[0][i][j]);  S' f" W8 t9 c+ T  C  h
}* R9 \( N! K' P# R2 ^+ l6 S/ \
printf("\n");1 V) V" A* r3 l/ O% J% U
}
/ w- b& _" L0 `8 y8 v) I1 [buer(a,h,2);
9 X5 |& ^: O2 q" q9 j  i1 V6 Wprintf("\n\nP的值如下:\n");
/ v' q1 Y; h, T+ K- {for(i=0;i<h;i++)
) ^  r" a5 d0 ^/ j0 d+ T1 d{1 C6 }: t. S  H+ V! `
for(j=0;j<h;j++)
: @8 i/ c+ k5 X/ a6 v* P2 I, C{
) @; s. L" T, ]; V% s2 J2 {if(a[h][i][j]>1)
, C, r+ F- z# F3 U, s" k/ qa[h][i][j]=1;
% G* M- G& W; B; v; xprintf(" %d ",a[h][i][j]);
9 ~6 R0 c- a3 l. P: `( J' v* c}) D9 Q! ?) ~' c2 I% w+ j* ]3 B
printf("\n");' V, G! B) _6 W$ V
}& K5 I% M1 [4 K* b
printf("\n\n\nwarshall算法:\n\n");4 r% @2 Z% i# c7 w" z' t
+ r% g6 W0 x! s5 j6 `
for(i=0;i<h;i++) //处理邻接矩阵A.转化成可达矩阵。) I/ b6 ]9 o+ i7 n; C7 ?
for(j=0;j<h;j++)  w) x; j% S! y8 y: a
if(a[0][i][j]!=0)3 l$ D+ s$ K3 S* [& y
a[0][i][j]=1;
2 q* N, P' j6 Y. ^- n% Eprintf("整理后的可达矩阵为:\n");7 G( d! Z9 H% [# X$ v8 S
for(i=0;i<h;i++)) l# K% e+ J% I, t2 y# B
{
& |2 V' P# O  J% Rfor(j=0;j<h;j++)
* B7 [6 g9 I% {+ k$ m6 n, z. Oprintf(" %d ",a[0][i][j]);$ G  E; U' k9 o; o$ C9 ?
printf("\n");
" y) U9 |! P' s, s8 r# o* d}7 V6 O3 W" E# P. D: R- c2 J+ @
warshall(a,h);
4 I* l" p, x( S( `3 ^  ^getch();* _" s/ f8 |7 c+ \0 J  \
}) S% _! @9 w3 _9 K7 {, ~: L# z
int jisuan(int a[N][N][N],int h,int z,int i,int j)
! v5 Q2 A7 l7 M% Q4 X9 ?{1 N9 G: T6 V* J. U% ?
int s,jg=0;7 h' Z& \) W- I. M! K+ [
if(z==2)
- ?4 D7 S( o1 q0 Wfor(s=0;s<h;s++). I5 z6 I# g7 }' W8 M1 G, r
jg=jg+a[z-2][i][s]*a[z-2][s][j];+ v& r* T7 }+ [# R# s
else 1 H( s% ^+ V- y: Y4 G; b" `
for(s=0;s<h;s++)
7 f- x5 Q! ~$ k; K. rjg=jg+a[z-2][i][s]*a[0][s][j];. u  T9 U1 O/ ?, K$ r' r
return jg;
1 A5 J" Q6 H8 V, X- Z+ g7 r}
; f& \# o5 T# G7 m) Hvoid micifang(int a[N][N][N],int h,int t)
0 D: Z: _  u7 Q0 B& A& y) J$ M{# x1 \1 I& k+ P: d. Q
int i,j,s=0;. W( S3 J9 s6 R2 J# I- G- d
int z=t;5 E' K2 _1 S% @
if(z<h) //矩阵的值不全为零。
% T6 J. Q' U) ~! k( M{ 0 e: J7 E( b3 A, {. @$ e- B6 {
for(i=0;i<h;i++)
! F9 U9 e9 |# s9 H7 xfor(j=0;j<h;j++)
% R. Q' d( _) M" p# e4 s7 U; Ka[z-1][i][j]=0; //全部赋值为0!/ E' m8 F+ q( J0 i7 B6 v% r9 ^
for(i=0;i<h;i++)
6 T1 R" Q% z1 g5 K4 p9 wfor(j=0;j<h;j++)" x7 Z0 C, ]$ u/ o! E# U  |
a[z-1][i][j]=jisuan(a,h,z,i,j);
9 Z6 E/ h& h8 Q' F4 Lprintf("\n矩阵A的%d次方为:\n",z);& ?+ R( B4 N2 [# u3 o9 q- k
for(i=0;i<h;i++): F/ }; Z6 j6 [) z
{3 d4 Q' G. ^) b
for(j=0;j<h;j++)/ T- S% n) E8 b! E) _; k2 `/ |
printf(" %d ",a[z-1][i][j]);
; V) n0 h2 E# U, f3 Yprintf("\n");
" q5 {5 Y4 M9 e8 ]/ z) L) O9 W" j/ m}, k! s8 @. s# Y: A1 b( [# V: C
micifang(a,h,++z);
6 X- y" J: h5 M: ?}
  S7 \( F0 ]% G. z" u& @}/ |* y) \+ ]' s9 H9 t
void buer(int a[N][N][N],int h,int t)
5 N" p8 ^8 `8 U6 u) k6 E8 I{0 ^& r* I' ]# D  _* C7 Q7 X' c
int i,j,s=0;
4 v2 ~0 s4 `& l! p9 d. @% \9 Nint z=t;
1 W1 p9 y' G4 v+ Z/ n) Y9 mif(z<h) //矩阵的值不全为零。$ J$ |3 z4 Q% Q2 ]8 N' x
{ ; `! D* m7 a% h' X
for(i=0;i<h;i++)' d5 X) a! r, t$ Z
for(j=0;j<h;j++)& x  ?  o* S5 O- l
a[z-1][i][j]=0; //全部赋值为0!
2 \2 }3 J/ s$ {, F; i8 Wfor(i=0;i<h;i++)
$ R3 [: I  M/ Z4 M. C# Sfor(j=0;j<h;j++)7 N/ V* R! z* p1 b- P% p
a[z-1][i][j]=jisuan(a,h,z,i,j);; J/ }! t; B5 S9 D1 \& ?! t) e3 Y# W
printf("\n矩阵A的%d次布尔幂次方为:\n",z);4 N" r5 c7 p$ ^& s% V8 N  J" \
for(i=0;i<h;i++)
% ^, l+ S! U7 n# N3 i( F2 K6 ]- x. c{3 C8 K# w7 L! Q0 l/ f' @% P
for(j=0;j<h;j++)
$ U0 J- }/ S* q5 F; }! ]! z9 d3 j; a{
' z& ^9 U& @! J# W# @: Iif(a[z-1][i][j]>1)
$ D. U7 C/ }( d# z- c% Ya[z-1][i][j]=1;
. `* Z" W! j( Fprintf(" %d ",a[z-1][i][j]);* H% o& A& E8 U9 s# s8 G; O' }
}# E+ J* b. C: a8 Z" e+ g7 G( x1 g
printf("\n");) |/ h. C! v( e) m$ N
}; M* U- d) Y& i+ f' B4 E
buer(a,h,++z);
% \6 R  d* @: h9 K, A}
& V) U/ [4 M: C( _}4 e: Q2 P- ~7 G
void warshall(int a[N][N][N],int h)
4 y8 I% ]; k  a3 D{& N# u/ Y) n6 B' e. r& @
int i,j,p,q,r=0,s;7 J% D/ o: j# _8 k3 c$ N
for(j=0;j<h;j++)
' h; Y- ^# ]& W& K  Cfor(i=0;i<h;i++)
) a$ P. N+ I- Tif(i!=j && a[0][i][j]==1)- [2 u1 }- g  q  |: \( V
{+ g& b: U) K1 o* {" S
for(s=0;s<h;s++)% {' F7 i& L7 I2 Y7 [* Q, |$ n5 ~
{
$ d- y( t: Y1 ra[0][i][s]=a[0][i][s]+a[0][j][s];
8 B5 r; i  Z% S& d6 Pif(a[0][i][s]==2)% p$ D3 R  d( I. L3 S2 g
a[0][i][s]=1;
7 g9 B- Z4 l! l. X}
+ U5 J# Y) w8 p2 H4 p& h/ D$ D9 Eprintf("\n第%d次运算的结果如下:\n",++r);9 N0 Z' L7 ]$ z
for(p=0;p<h;p++)
7 P% `  r0 }8 K9 w4 ]- K{
  X) m" h' @2 d$ Nfor(q=0;q<h;q++)
/ h. r- I6 Z; F4 Q# Q2 _7 U  ^printf(" %d ",a[0][p][q]);4 h+ [  Q) Y9 N' q# \7 H/ J
printf("\n");4 @- B" S0 L$ X$ ?1 O7 X
}( H; r* {" O! A, j# Q5 [; q- r+ f
}! Z) c7 ^9 j, J
}
作者: lizhaowei1990    时间: 2012-4-11 20:25
先点一点这个是要干什么?




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