数学建模社区-数学中国

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

作者: chenhande    时间: 2012-4-11 18:03
标题: 求教高手啊,C语言改matlab。帮帮忙,感激不尽
#include "stdio.h"
0 G  G% [( D9 a0 j) I#include "string.h"  O( {2 d0 u6 Q" ~
#define N 50
% s; U. i2 P, Iint jisuan(int a[N][N][N],int h,int z,int i,int j);6 J; i; f0 |% t2 i) y+ ]
void micifang(int a[N][N][N],int h,int t);7 U/ S' m6 q4 c" A
void buer(int a[N][N][N],int h);" W& B- H) {9 p" v" e/ I2 I+ {
void warshall(int a[N][N][N],int h);
/ a- s0 R0 i9 B- R; z1 r" v7 bmain()
, o: A4 @0 Q- ^3 F{0 ~. @/ D6 a( Y7 P4 j4 {
int i,h,j,t;" `& F. d7 Y  v
int a[N][N][N];* c: W. |0 g- l% ?- V
printf("请输入邻接矩阵A的行数(或列数):\n");
- d6 v' V4 y+ M4 [/ q  m" D# \5 r- o6 Uscanf("%d",&h);
* W5 q# H' n6 `& I* @printf("\n请输入邻接矩阵A:\n\n");# d5 Y8 P) K+ a/ `- s; P8 v
for(i=0;i<h;i++)
% F( ?1 ]+ |6 M7 T+ `{" |* `# H! n. x, O( n! d; U0 m
printf("请输入邻接矩阵A的第%d行.\n",i+1);7 X* r1 v9 K$ i! @0 O1 z
for(j=0;j<h;j++)
4 g# N8 m' z! T$ L, Z$ iscanf("%d",&a[0][i][j]);
2 |# [' q8 h3 g- _  X. m! T' D}
0 k: h; {2 O% b/ Vprintf("\n邻接矩阵A为:\n");
& y% `8 B$ J/ d" Efor(i=0;i<h;i++)
& f0 x8 ]: I# d, n  X{& E! |" w6 p# V7 b. M$ y9 a
for(j=0;j<h;j++)( g) V: n6 y0 c) d3 A+ d
printf(" %d ",a[0][i][j]);/ B' A* b  N# W( D5 t- R7 l
printf("\n");3 u( X. m& l3 S
}
% L$ ^/ }& z6 ~( k' ~$ Y$ B3 ^" |printf("\n\n\n算法一:\n");: r  ]1 V1 A9 M4 w1 D
printf("\n矩阵A的1次方为:\n");
& L% i/ e$ ^9 A0 x  ]5 y& Gfor(i=0;i<h;i++)+ p8 _. c# I" H
{
% W4 [( A7 [' \9 v! xfor(j=0;j<h;j++)6 {6 c7 K& C, b1 @$ e) _& o
printf(" %d ",a[0][i][j]);
3 f! `* f+ k8 m, N- G6 aprintf("\n");  T" e* w* G2 @  J
}
3 o) e" J+ q' F. C. u/ L! |  k5 Umicifang(a,h,2);0 c* Q7 v  {, x9 W; F: @
for(i=0;i<h;i++)! D9 r" D" R+ |$ S  Y
for(j=0;j<h;j++)" B( k! s; p* R9 @
a[h][i][j]=0; //全部赋值为0!5 x- P" \' f3 G9 T) E" @
for(i=0;i<h;i++)) l3 j6 L; G7 X; j. }! b# N
for(j=0;j<h;j++)
- U  r5 t% ?- G. l/ q7 Vfor(t=0;t<h;t++)" |% Z5 d( D( _; m
a[h][i][j]=a[h][i][j]+a[t][i][j];  d# h4 }$ f- z+ E6 ?
printf("\n\nB的值如下:\n");+ ~: y7 S4 {$ ^
for(i=0;i<h;i++)
+ m! G$ L) ^7 C/ a! [1 u* Z* F{
$ }6 q; H" Z9 I6 F  f; n6 Tfor(j=0;j<h;j++)
; H# Y& g2 j3 ?0 Kprintf(" %d ",a[h][i][j]);
7 X/ h1 X, B+ G6 ~3 S5 ?: H3 M* P: Cprintf("\n");
$ |5 L& h+ Q: P( q  x}
& ^8 `5 M/ y* K! H. p: _+ ]printf("\n\n\n算法二:\n");9 j: i' @  B! d  k; R* m
printf("\n矩阵A的1次布尔幂次方为:\n");
/ G( ?, W. ~+ J4 y3 Rfor(i=0;i<h;i++)' E% @6 k+ C6 m; C+ R6 r; F
{2 _3 |) b9 D* Z1 g
for(j=0;j<h;j++)
: S$ t# w+ M# F{: H3 }5 Y! N2 c# |# ^
if(a[0][i][j]>1)3 u' D3 z6 b7 q0 G) P* [0 w
a[0][i][j]=1;8 t6 Z2 |% o) o3 Q" E
printf(" %d ",a[0][i][j]);* L6 M* G3 \2 Z
}
6 B, [4 L  V7 L9 O9 o- X  u# j/ Lprintf("\n");6 G- O. j4 J. y0 q
}9 }# A$ v. t+ c+ c9 J! F4 ~+ s0 N) Q9 g# c
buer(a,h,2);
. c% S0 C. I3 p3 z, |printf("\n\nP的值如下:\n");
- _  L6 v% P+ wfor(i=0;i<h;i++)
" J, D9 d3 g/ J# x{
# R2 h9 |: F( ofor(j=0;j<h;j++)
8 k( \, z7 V- [5 q* w* E: k{ " k) J7 J9 e1 `$ o
if(a[h][i][j]>1)
' p- c: e- E+ v- g( |8 _a[h][i][j]=1;' B+ ]2 D5 t. u4 o
printf(" %d ",a[h][i][j]);, m% a/ D" J9 [  y
}
( h' K- \8 \' C1 M) @  Vprintf("\n");
2 n- a5 U$ u% s8 K}" x. ^0 [6 p- F" A/ b' V& n6 |5 K: b
printf("\n\n\nwarshall算法:\n\n");
* O: h4 C8 c: ?5 w$ [) F! Z
/ K; {* R% n, }, hfor(i=0;i<h;i++) //处理邻接矩阵A.转化成可达矩阵。
$ G4 n3 ~6 c. b+ C8 Y6 Mfor(j=0;j<h;j++)
  |: Q* X! u2 E) Pif(a[0][i][j]!=0)5 @! K& b! ?6 ~  I
a[0][i][j]=1;
5 C3 M: q" N1 ~) s# c8 T( hprintf("整理后的可达矩阵为:\n");; B# d5 d/ ]% w7 ]6 X5 S
for(i=0;i<h;i++)
) B3 _- I! y; l% X, \. W0 m( C{; M8 ]  p$ ]0 ~0 f( v
for(j=0;j<h;j++)
' o: I7 q2 K+ w& d- Oprintf(" %d ",a[0][i][j]);
/ W* f0 j- @$ b0 a4 }printf("\n");
8 k; q& U- a+ a0 `0 D' O6 i. ^}2 j2 g2 ^1 {# `/ p
warshall(a,h);# t- `/ h, Z' v  W
getch();
3 k$ {2 w& T% e3 F# }}7 G2 j! y7 Z+ t! r5 R# ^/ ]- A
int jisuan(int a[N][N][N],int h,int z,int i,int j)
3 o+ R% r  g2 s( {{5 p1 ?2 F: ]) b& C/ q) F7 c. v
int s,jg=0;' u- E: V) v6 R) r: O: }
if(z==2)
$ B' [, u5 c, u+ y8 Z# sfor(s=0;s<h;s++)( _- Y) R2 ?' A( i8 ]6 M
jg=jg+a[z-2][i][s]*a[z-2][s][j];9 K' p- Y0 P6 P6 _( j9 n" W
else
# ]6 n3 h& ]# @) T2 {/ M6 L# a9 rfor(s=0;s<h;s++)9 }  h3 ?. G( r
jg=jg+a[z-2][i][s]*a[0][s][j];
! H" l  m3 R: hreturn jg; 7 D  F# e, Y: u1 v
}
  N  a# O. f  C) Gvoid micifang(int a[N][N][N],int h,int t)1 C& }( R9 h# y* ?. S8 k
{- f$ D! l5 |: S) J2 y
int i,j,s=0;
1 y% e7 z2 b  V3 S! }) U* fint z=t;8 G) Y, S% Z. p% X# J" r
if(z<h) //矩阵的值不全为零。8 a* |9 g. n) G, P% r
{ $ q/ t. m+ E% l5 G
for(i=0;i<h;i++)
- @0 J; a1 _4 b* V9 T# Cfor(j=0;j<h;j++)5 A7 L, C  ^& u
a[z-1][i][j]=0; //全部赋值为0!
  [- b7 o$ F! K5 M* l% Tfor(i=0;i<h;i++)) l: R6 |% x# ~, y1 s3 k5 T! W
for(j=0;j<h;j++)
2 n' A6 Z3 S. ]- ~0 ka[z-1][i][j]=jisuan(a,h,z,i,j);
: s  W3 W5 y6 j5 L1 jprintf("\n矩阵A的%d次方为:\n",z);
8 F( `( R  V/ l& K1 s6 Afor(i=0;i<h;i++)
; J0 T: H" Z& n! F' [- T{" V1 j/ h# M5 w+ H  a# j
for(j=0;j<h;j++)
5 W; z  j4 s# E6 |7 N, e" `: ]printf(" %d ",a[z-1][i][j]);
1 h+ b% R, @1 c- F* vprintf("\n");- J  l, y4 K) @. M
}, H/ m& {. e' D' ^/ x3 O6 @* G2 Y) _
micifang(a,h,++z); ; P* D( y- A( I
}
6 J1 f/ h4 O# J, n9 U0 |}
3 S1 [. r8 O& h) Yvoid buer(int a[N][N][N],int h,int t)4 H. n8 R( `( e$ j' g$ ^* m
{6 m. a- A% X7 Z, ~2 `
int i,j,s=0;
! m1 q4 F( h: S. y* w& G5 t5 gint z=t;
3 K% [- i- r2 h5 Q) d/ yif(z<h) //矩阵的值不全为零。9 L9 k1 H2 @8 q* B: |, f
{
5 }8 {7 \* q7 p: U; Y( e3 ufor(i=0;i<h;i++)1 ?5 g$ [' e5 W
for(j=0;j<h;j++): X! G6 y  W4 t
a[z-1][i][j]=0; //全部赋值为0!3 ~; \/ _6 c; m$ |( p
for(i=0;i<h;i++)
, t, O: g) ~+ h1 }for(j=0;j<h;j++): j9 v8 \  H8 D! V4 Y: @. M  v
a[z-1][i][j]=jisuan(a,h,z,i,j);# x9 T. W& p! g( U8 F
printf("\n矩阵A的%d次布尔幂次方为:\n",z);
# y9 u1 B: {+ J! y& ^  jfor(i=0;i<h;i++)4 ~0 V& p' E, m( J
{$ u7 g. b, h' G  @
for(j=0;j<h;j++)6 O0 E2 ~5 w& t; i
{
/ G( F- `4 |- H! F+ Y+ mif(a[z-1][i][j]>1)
# c! R- ]& Y8 pa[z-1][i][j]=1; $ c4 ^- Z6 f; [
printf(" %d ",a[z-1][i][j]);
: A( w2 p+ n9 l8 |* U4 R! ]$ q}* W# v8 D" H; k4 Q+ T! {. T
printf("\n");; R) D( N7 f6 h2 _' D
}1 ?& N6 j$ l1 Y1 u1 s8 `+ K
buer(a,h,++z);
, e4 c% z* k6 Y6 |}. T4 x. `& v9 |1 T) T/ D/ _
}
% @6 {; {+ X6 t- T* T& p" O& Mvoid warshall(int a[N][N][N],int h)
$ y4 ?& w! z+ d4 u7 ~{( h0 M3 i' P# j3 ?! F
int i,j,p,q,r=0,s;
1 L; `; P8 r2 K5 x$ v/ f' N: gfor(j=0;j<h;j++)0 L% W7 B- v# |  p/ J
for(i=0;i<h;i++)
* y* Q4 o" x. gif(i!=j && a[0][i][j]==1)/ L3 s1 ~" F: A1 r# d7 G
{- \% @. s* v, [0 K* K8 h0 X
for(s=0;s<h;s++)/ N  r' t+ K. i( l9 u
{ ) G0 s0 F5 w9 h
a[0][i][s]=a[0][i][s]+a[0][j][s];1 e8 G5 w5 p, k5 D) l! t0 @
if(a[0][i][s]==2)/ C. G$ a% j( i$ N" f- B
a[0][i][s]=1;1 }* ~2 P4 @9 z6 O0 [2 t# {- f
} ( G" U0 Z: u7 g  G: e9 g* F7 R
printf("\n第%d次运算的结果如下:\n",++r);' U1 A5 m+ I3 Q$ b' c
for(p=0;p<h;p++)
0 [: D- R; K# z# E, y{7 {. O& H- x2 i0 f3 {+ P6 j  N/ j% M
for(q=0;q<h;q++)
0 H5 p* G, {8 Y* K! A) M# `+ Bprintf(" %d ",a[0][p][q]);
/ `+ W$ c8 L5 c  ~# w$ X# ]8 ?printf("\n");
9 a5 W. N, R, n}
9 ?! d$ R8 H' L! K1 _}, {& i/ n) k5 K8 {) l
}
作者: lizhaowei1990    时间: 2012-4-11 20:25
先点一点这个是要干什么?




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