数学建模社区-数学中国

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

作者: chenhande    时间: 2012-4-11 18:03
标题: 求教高手啊,C语言改matlab。帮帮忙,感激不尽
#include "stdio.h"
: {- J: Z6 F$ W  }+ n1 \#include "string.h") Y2 N  ~, i% ^  U7 l+ _
#define N 50
4 f0 Z4 {5 K1 y% j) Jint jisuan(int a[N][N][N],int h,int z,int i,int j);! y9 p% }. R# L# `
void micifang(int a[N][N][N],int h,int t);+ |4 V% }! y" ]  y5 F' i# {& z. h
void buer(int a[N][N][N],int h);* i# |0 N. o3 h' `7 p" m; |
void warshall(int a[N][N][N],int h);
% H+ |% u2 K' r1 dmain()
4 v: `  g& D( {) `{" }/ B) }! T' K& O" t" Q; V
int i,h,j,t;0 y, F% T& v4 _# b2 w9 L
int a[N][N][N];
& ^8 O$ v& D& M. Uprintf("请输入邻接矩阵A的行数(或列数):\n");
# n# j/ M' F1 D2 }/ E! Z2 Qscanf("%d",&h);
% m& j. k; s' n7 Y: S+ Qprintf("\n请输入邻接矩阵A:\n\n");1 G, d# _9 H1 c. V/ i! n
for(i=0;i<h;i++)
. V; Q2 y2 K( t. E{
; S# M7 V  Q; S4 Eprintf("请输入邻接矩阵A的第%d行.\n",i+1);
2 {2 A6 Y1 B& d% Y7 Cfor(j=0;j<h;j++)( u4 e# ^* A: \* f7 D
scanf("%d",&a[0][i][j]);
  H& R* m7 g: i% K9 W}
$ m& `& w* M5 ?7 jprintf("\n邻接矩阵A为:\n");+ l" r' j6 l0 n  G
for(i=0;i<h;i++)/ n" P  T. w8 V8 g! w) n0 E2 ~' j
{
, w; R) ~* S3 A  E/ [for(j=0;j<h;j++)
) ]( w- N1 G0 ?' dprintf(" %d ",a[0][i][j]);
9 l+ c6 M% ^" ]" V9 Rprintf("\n");
/ J# r/ }5 }- z  Y2 j% N' t* Y}# h* D0 R( f6 \* X% G
printf("\n\n\n算法一:\n");7 D. n: c" l7 y( N+ {4 K% C0 y
printf("\n矩阵A的1次方为:\n");$ t1 E' F9 e& p$ Z! G
for(i=0;i<h;i++)2 H/ L0 w9 C5 f1 D1 {- V
{
) l% [. I) s1 k$ l. P' ~2 W0 @for(j=0;j<h;j++)
. i# C3 }+ n; d" pprintf(" %d ",a[0][i][j]);
" h: n( Q5 {% K6 t8 P2 Vprintf("\n");
  J" Z: n0 S8 F& g, J}
9 d) }5 k( e. J/ L- @micifang(a,h,2);- Z6 Z% V8 y& ?* k
for(i=0;i<h;i++)8 P7 d( u, c0 N: b% h( i
for(j=0;j<h;j++)
% w6 Q: t6 m9 U" N/ A) d* Wa[h][i][j]=0; //全部赋值为0!% k6 \+ D2 w/ A7 W2 S/ l. Y. \5 g
for(i=0;i<h;i++)
4 _, h( g; v" l; E& Jfor(j=0;j<h;j++)
. _: [. l  _, k' Q, [6 @for(t=0;t<h;t++)
  \1 L) ~$ Q! ya[h][i][j]=a[h][i][j]+a[t][i][j];5 M4 }2 T: j# M3 }0 p8 {( Y' o9 v
printf("\n\nB的值如下:\n");
5 N! }0 Z# r  m% |% q  K. mfor(i=0;i<h;i++), X5 J  w6 y" a( e- j- o4 |3 y
{* }+ Q- U1 r5 z) g" w0 _- D
for(j=0;j<h;j++)
& Y, m1 ]' W* W5 c7 mprintf(" %d ",a[h][i][j]);# j3 [, l6 ?7 g5 r! D: t/ ^
printf("\n");
1 G; |8 U* j0 J6 {$ D# |}
: y% r% ?9 W6 tprintf("\n\n\n算法二:\n");
& t( X/ L, C. O8 _- w* N1 Bprintf("\n矩阵A的1次布尔幂次方为:\n");/ K' ]# k; j9 X, T, _' N
for(i=0;i<h;i++)
; ?5 I, A. C5 ^! \1 c; B: g! I{/ o! ^* r5 f1 Q1 D5 d" c+ P- O
for(j=0;j<h;j++)
3 x" k* t1 B7 g% R# N* Z{
  G) W$ g  q5 b0 ~/ ^# p+ U* aif(a[0][i][j]>1)
' G  y, ?% d6 m6 h* P2 P: _a[0][i][j]=1;
; z! i, c; h6 C9 U# h2 [/ oprintf(" %d ",a[0][i][j]);
  @/ ^" A% l4 p, b0 g5 {6 i7 t# D}$ E! g; F, s: T4 A
printf("\n");
% ?% h; ~, |4 |% ]; [9 n* R- {- w/ ?}. I2 i3 B" C/ L6 G' w( `4 L
buer(a,h,2);
, {$ ?& M% Z7 Y$ \printf("\n\nP的值如下:\n");7 H: l! u1 j' M1 i
for(i=0;i<h;i++)9 O) B/ @8 S% j" W
{: y- W- n( Q5 e" X$ h% z  W. ~
for(j=0;j<h;j++)4 u6 g  Y, w- @9 @
{ 1 o3 t& L" h% \8 e; n7 Y& ?7 ~" b1 [
if(a[h][i][j]>1)9 Y) y3 w! d; R0 D% p- z
a[h][i][j]=1;
# ^( l+ K7 K$ xprintf(" %d ",a[h][i][j]);7 I; r9 {9 p' e+ T& K5 U
}
/ L0 E  W. Y4 z6 pprintf("\n");
4 X) e. t4 c# R. L/ B3 V2 C' O}% L( z0 t2 E- s, Q" n
printf("\n\n\nwarshall算法:\n\n");
  f- N0 I  J. S8 s# ~1 g
; @; _# _" H/ n+ R' f' Ifor(i=0;i<h;i++) //处理邻接矩阵A.转化成可达矩阵。3 m' [2 V7 @" W! o# w$ ?
for(j=0;j<h;j++)) h4 L8 v1 y1 q9 ^  s' \
if(a[0][i][j]!=0)
( N. B0 F6 v; X$ E4 Wa[0][i][j]=1;
; A8 s1 N+ ?: ]6 c* T6 h0 @printf("整理后的可达矩阵为:\n");
( J: b. v  E6 \1 f% i' t5 S0 I9 x* `for(i=0;i<h;i++)" C/ C: L& t9 N1 }4 K
{
" @% O$ g2 M5 V5 A9 {3 H8 xfor(j=0;j<h;j++)0 h' G/ E( w2 u3 m. V
printf(" %d ",a[0][i][j]);8 j) N4 d3 R* H  E. P1 g# F2 k8 r+ X
printf("\n");0 b  E; K0 s4 L6 x* q
}) I- E5 q$ a5 ~: q; [
warshall(a,h);' c6 R7 r& p: f) n
getch();/ |8 Y4 \5 ]9 l  U5 I
}
& V. S6 A7 ?4 c( ]int jisuan(int a[N][N][N],int h,int z,int i,int j)3 G" x' `+ m& I  O/ ^
{  W( H+ ^9 V) e% U4 K" U) M+ E8 C
int s,jg=0;
- t+ |7 t$ H  K( @2 w) ^% nif(z==2)
; B7 l+ x$ L6 tfor(s=0;s<h;s++)- F! {& a0 k9 q" w4 G* p* N
jg=jg+a[z-2][i][s]*a[z-2][s][j];
4 ^2 _8 w# A8 Eelse
8 U7 C) ]8 u' h* d  q4 G8 jfor(s=0;s<h;s++), `8 ~2 G8 A% L) [" J* L( i% o
jg=jg+a[z-2][i][s]*a[0][s][j];( ]5 J4 [6 @+ x( z) M' P1 w' S
return jg; " ~9 R7 K! C- {, j) X
}
# J0 h+ }6 ^* S6 L: e3 Xvoid micifang(int a[N][N][N],int h,int t)
9 i( J" q! p# M# A3 ]{( F0 Y; k) E" D5 U  }4 {2 g+ k
int i,j,s=0;6 K- H) X2 D, e0 K. {
int z=t;
" H' Q: O! k' z# K7 g3 Kif(z<h) //矩阵的值不全为零。2 {/ m0 B1 c7 `; L8 W
{ 9 N1 Q! y. z3 F5 L3 p
for(i=0;i<h;i++)) K' s/ q5 |; p% m6 R+ Q8 p
for(j=0;j<h;j++); `1 O5 m3 N9 h" U7 V3 ]
a[z-1][i][j]=0; //全部赋值为0!
8 l  M7 s8 M# ]8 C  M" U% D* Efor(i=0;i<h;i++)
& e# _" G% H' G9 Y7 lfor(j=0;j<h;j++)
7 h4 M8 D' J6 V6 ba[z-1][i][j]=jisuan(a,h,z,i,j);
: z. f; E$ M# _; f9 C! Rprintf("\n矩阵A的%d次方为:\n",z);
6 H" X* [$ x8 @! C, xfor(i=0;i<h;i++)3 q; x( S- W% f7 p4 l1 x: w
{
  a0 g! j: G7 \# K& Z; [3 Ffor(j=0;j<h;j++)  ^' Q& ~4 A# B
printf(" %d ",a[z-1][i][j]);
! m+ X' \( ^3 ^, |; Dprintf("\n");- B  N% t: h1 [' W1 Z! N7 v
}/ q; H5 Q- J# D+ K7 @9 F+ T
micifang(a,h,++z);
' N# j* X. D0 ~& v}9 [# o: E. R1 ?) W( \
}
0 x7 P1 M3 l" j) ]) C0 \void buer(int a[N][N][N],int h,int t)
: T( ]1 ^6 v0 F$ B! w) F{
# H$ J% f1 [2 H7 W0 d, m0 uint i,j,s=0;
9 o, k3 h) V8 L9 F* p  J" yint z=t;, L2 R  y+ {* b. ]! j! z$ ~
if(z<h) //矩阵的值不全为零。) P7 _0 f! p: w# t$ {; V& ]2 T
{ 0 j( j  H8 ^  H9 j) V  p
for(i=0;i<h;i++)& s5 N. T/ u  B0 v  U
for(j=0;j<h;j++)
6 t3 i* ]4 _' O/ R9 }a[z-1][i][j]=0; //全部赋值为0!
4 b% `+ w- t. P' T, v" e: ufor(i=0;i<h;i++)3 y! W: {6 ~4 |" e
for(j=0;j<h;j++)
" ~; b" a) o9 Z5 o, ba[z-1][i][j]=jisuan(a,h,z,i,j);
6 I" J- h$ h: D. J1 O, Tprintf("\n矩阵A的%d次布尔幂次方为:\n",z);9 @. R( y! x( j3 e2 ?& n5 l
for(i=0;i<h;i++)
$ H$ y  f! s3 m+ o0 e{
9 J9 [: e8 Z3 t$ w5 c5 y& Gfor(j=0;j<h;j++)! h, Z" Y8 O. E/ {
{
# F8 m1 g! ]* W6 D0 B0 {- \if(a[z-1][i][j]>1)- z- ]0 Z3 o* t' q
a[z-1][i][j]=1;
5 M  V3 ]; u, f; _! w- Nprintf(" %d ",a[z-1][i][j]);
6 a, z8 B6 Z+ q* z7 g; ^}
" k# `  T8 B4 V; C* C* t$ c- l" Jprintf("\n");
9 J# {% |3 m0 k" U7 c: q}
* f( x% ~: S4 k' O5 [& m  xbuer(a,h,++z);
4 `  @* X. ^: N9 K3 `8 Q0 ]% B}# a+ O9 z( |  r  ^% n0 h
}* U+ ]; K" `& E, k% V$ }. t+ _
void warshall(int a[N][N][N],int h)7 I) a9 H! r- g* }$ V  @
{
1 l+ F2 T% u* f6 v9 i) Hint i,j,p,q,r=0,s;
: M% Y9 M6 _0 {$ A" M# H2 q+ Wfor(j=0;j<h;j++)) W3 L2 E& J4 O( g* Y2 ^6 x
for(i=0;i<h;i++)$ q! v5 n( y2 E, y0 U! X, g
if(i!=j && a[0][i][j]==1)! l* Q: g1 z+ @) Q1 ?
{
+ F0 {1 E. y- Ifor(s=0;s<h;s++)
3 i! ?9 J5 m2 P4 _{ & B9 B' m  `: y; B8 E: q
a[0][i][s]=a[0][i][s]+a[0][j][s];
( \( c$ ?* C) A$ hif(a[0][i][s]==2)
5 b8 w) R/ T: [9 N2 p; \a[0][i][s]=1;! S: ]# b( k) N$ \, P, O8 g) ^9 w* x
}
" }( p, Q. s3 G, v# r% `6 V. }4 ?printf("\n第%d次运算的结果如下:\n",++r);
3 W, L: x& g# f; y! O' f9 ^for(p=0;p<h;p++)* g( V% f' O, v& ?, e
{+ V( f9 s. k, t# n$ c& q
for(q=0;q<h;q++)/ i9 X# N4 f" k8 {* m
printf(" %d ",a[0][p][q]);2 c" f# f. Z$ j; Q
printf("\n");
2 n+ v# M, I/ y( K8 N! Y6 E}/ c  F1 s  {& Q/ _
}
/ u, S% h) g, I}
作者: lizhaowei1990    时间: 2012-4-11 20:25
先点一点这个是要干什么?




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