数学建模社区-数学中国

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

作者: chenhande    时间: 2012-4-11 18:03
标题: 求教高手啊,C语言改matlab。帮帮忙,感激不尽
#include "stdio.h"' V6 f7 c* x$ Z& Y5 o# ?
#include "string.h"
( j+ ]- J6 a: s5 D% U#define N 50 & d6 Q  u+ }6 w6 v! Q  R* ^
int jisuan(int a[N][N][N],int h,int z,int i,int j);. _; q+ F8 [) _) F9 V, ^
void micifang(int a[N][N][N],int h,int t);
7 \7 H) N. `0 `2 T4 Q. D9 o- ivoid buer(int a[N][N][N],int h);
8 [. {" Z$ y; E  {& P, N6 Dvoid warshall(int a[N][N][N],int h);* t" K( T# O: R+ J
main()
, a0 T- {9 L, D! r) y; L! D8 e{
8 l. q$ Z  s( F. vint i,h,j,t;) N" O5 k1 ]/ U& A2 i
int a[N][N][N];
, o% G7 t  a7 M  i+ h: N" [printf("请输入邻接矩阵A的行数(或列数):\n");4 c, Q$ A4 V0 d3 \. ]
scanf("%d",&h);& t5 c2 O2 C" o+ s  u! `# J  k1 S
printf("\n请输入邻接矩阵A:\n\n");
- _" P( p1 I( L" {% }1 s$ d3 m: Tfor(i=0;i<h;i++)1 l+ |' ^8 z4 E( j; e% T. q
{- a! U; m. p4 H! n& Y4 O( }
printf("请输入邻接矩阵A的第%d行.\n",i+1);! z2 K4 `5 F+ @: z3 r* n
for(j=0;j<h;j++)- K6 U: ?5 G- m4 s
scanf("%d",&a[0][i][j]); 1 m8 S, ^  {0 q, \2 D
}# V" G  |% @( X
printf("\n邻接矩阵A为:\n");* B( N2 F. [. f! Z) ?) [1 O
for(i=0;i<h;i++)
* {" f7 x1 W# E. q* m{
2 P) o! e) j& B* [# M9 Z* Zfor(j=0;j<h;j++)! _1 J1 U7 L& t* q
printf(" %d ",a[0][i][j]);
3 d  S7 W9 B7 {0 Aprintf("\n");
2 T6 K8 n4 U; N4 B: w  K}) ?. d- U& D2 I4 D' F* n
printf("\n\n\n算法一:\n");
. J" B1 \. T/ k/ R: U, n  ^printf("\n矩阵A的1次方为:\n");! o! k$ @$ B* o8 d& f# u2 t* i& V
for(i=0;i<h;i++)
$ P. g) X9 }3 G9 O& r% q7 P{3 v& M0 I0 ~( F
for(j=0;j<h;j++)/ f: T  Y. t  O1 W; a! M1 v) O
printf(" %d ",a[0][i][j]);( g2 z4 l& c+ @* Q: t2 {% J
printf("\n");
8 _9 G; A8 S. M8 a7 s, j5 l}* `7 R, S5 M+ Y. p- f7 [. U5 H: G  n
micifang(a,h,2);) y: A: h% Z9 ~9 U
for(i=0;i<h;i++)
2 D. l# e" Z) d) }- ufor(j=0;j<h;j++)
( M3 i0 M7 \" `a[h][i][j]=0; //全部赋值为0!
' }3 e. E1 S' M# gfor(i=0;i<h;i++)4 g: i) k( M) ^( N1 x4 M3 w
for(j=0;j<h;j++)
4 l4 n- I& G2 k" S( u$ N- yfor(t=0;t<h;t++)
. s7 d" x& r+ r0 {+ k: V: l1 Ma[h][i][j]=a[h][i][j]+a[t][i][j];+ M; l7 r0 ]& o! }6 b. J
printf("\n\nB的值如下:\n");
* e. A7 M) a. r, p8 b8 G) Sfor(i=0;i<h;i++)' V  e4 C& x. R8 P* b
{
, q6 D" \  B5 \/ I) x' O* {for(j=0;j<h;j++)
+ j4 g" y2 g% n: P( E0 D" I) x: Cprintf(" %d ",a[h][i][j]);' ]  @- t- H* ?$ v& ?
printf("\n");& k- C, U; L5 V( z& t8 {
}9 _( B6 w$ ^6 t; R- l
printf("\n\n\n算法二:\n");* ^  O  H% F. D; ]$ i
printf("\n矩阵A的1次布尔幂次方为:\n");
) ~$ ]7 w1 d# W* f% s3 i6 Vfor(i=0;i<h;i++)6 Y* |; J& `8 T
{/ m& e$ a* q/ L% R# `. A. F
for(j=0;j<h;j++)& |% `6 b+ a; ?8 G9 r  }4 D
{* K8 ]0 _! i( J8 c9 r6 P
if(a[0][i][j]>1)
% v) I# Z! @3 T9 ?! Qa[0][i][j]=1;. K4 w$ }4 ~; N- P9 I2 Z2 C. L
printf(" %d ",a[0][i][j]);  }3 {8 c$ g% }. l' q
}2 e' d2 }  K" |& W+ Y, E! V
printf("\n");6 M1 |% u+ {, f" E) S
}
( g; Q8 c; v6 T" h6 hbuer(a,h,2);
/ ~- ^: Y: t1 S( S  dprintf("\n\nP的值如下:\n");. O8 X- l4 e7 ^4 o+ e( B# u: U) l
for(i=0;i<h;i++)
9 C  }# z5 W" [6 A, `{6 N! s; j$ N+ T  ]# M9 L
for(j=0;j<h;j++)
9 v  B  B/ ]) C2 D{ ! k3 ]" t0 X$ L$ l
if(a[h][i][j]>1)1 h! Z% W6 }# o& n9 T
a[h][i][j]=1;
: z# v3 ?4 w: U5 Lprintf(" %d ",a[h][i][j]);# G3 C" V2 [6 Y, G
}5 C! ~! C3 g& {* G+ K6 @  Y% [
printf("\n");! B; ~' X2 ~; R1 B, z$ }: s
}, A' K6 D; i: M$ u- ~, {
printf("\n\n\nwarshall算法:\n\n");: ]4 X# e4 g& |2 [
, E% h: o" B) w. u& s2 {
for(i=0;i<h;i++) //处理邻接矩阵A.转化成可达矩阵。/ c% O/ G* @/ b- d/ F6 C" h
for(j=0;j<h;j++)$ v3 t( t1 N: q5 o
if(a[0][i][j]!=0)7 h. t4 ?2 G% ?
a[0][i][j]=1;) i; K' I3 Y3 c& Z, q% q- O9 m8 T
printf("整理后的可达矩阵为:\n");
, V4 A: ^  ?2 _" G9 A$ T% ~) yfor(i=0;i<h;i++)9 w7 w6 w- _: E+ P, }
{
; g2 z: e4 O: o$ }/ \7 K9 ?% [3 kfor(j=0;j<h;j++)4 V; r6 U) L& U0 J% H/ J
printf(" %d ",a[0][i][j]);/ d/ L1 p' q1 |) ^; T( d7 D
printf("\n");
% I+ d: x% _- j5 @}
2 |& T, I- e2 @  }& dwarshall(a,h);# O6 n" t; y; i! e; x2 G5 `$ j
getch();
& J& s) b( @9 Y# y) H}
: s  l0 ~- ^. f1 C0 Qint jisuan(int a[N][N][N],int h,int z,int i,int j)8 ?! y, @9 v4 ~
{
0 m1 r* Y" E# b( L  v6 G% mint s,jg=0;+ t% l( g0 a  q  E9 g% B
if(z==2)' x+ G# S8 k6 @* Q9 M. r9 A
for(s=0;s<h;s++)
5 p) t8 B) e4 j' i0 C5 j- Y6 Djg=jg+a[z-2][i][s]*a[z-2][s][j];
  D5 ^! R# \+ I9 Jelse
2 P1 h6 B6 t  S7 l& H4 C7 Kfor(s=0;s<h;s++)# ]6 [' E2 R8 D0 P, _) D
jg=jg+a[z-2][i][s]*a[0][s][j];
; _% E! u/ ~% U$ B' D5 u9 ~return jg;
, `) I& S& G, ^}. Q6 p4 u: P# }* C6 d) I4 Q
void micifang(int a[N][N][N],int h,int t)3 \$ `/ k% E: ~6 P  e, ^# r7 G
{; l  B5 U. W7 |! Q: r
int i,j,s=0;
, F! L' t1 k+ Y. C; I8 w5 M  o+ nint z=t;+ a! |6 |* W. I: ^1 F% a5 w: i9 A
if(z<h) //矩阵的值不全为零。
4 C% s) j; n% T% z{ * [* T5 T/ F- [$ X
for(i=0;i<h;i++)
: ^1 k4 ^8 H8 l1 n3 Dfor(j=0;j<h;j++)
  r* t7 E2 C1 a% d5 `6 `2 ea[z-1][i][j]=0; //全部赋值为0!6 D7 @% A5 q# N9 w
for(i=0;i<h;i++)% {. Q* _+ K/ r8 F/ D
for(j=0;j<h;j++)4 {/ p$ u7 v7 f
a[z-1][i][j]=jisuan(a,h,z,i,j);
1 Y7 N6 a) [& H3 lprintf("\n矩阵A的%d次方为:\n",z);
5 {: L: ~' z) Yfor(i=0;i<h;i++)
. o+ S8 C3 z4 J$ ]{/ s/ A/ b4 a# `% U- ]4 J
for(j=0;j<h;j++)1 q6 K+ F! S  G" `1 G! J
printf(" %d ",a[z-1][i][j]);- k' Q7 W# o% p1 V  V' I2 Q$ w+ S
printf("\n");
: a6 W( v. g2 K. @1 d# s}* R# n+ b: W2 L! H$ i
micifang(a,h,++z);
% K2 v8 ]- Q- h  B/ M! ]- G+ U}$ u! m  Q! x6 T3 G; t% B
}
; n2 o; C; S, O, n+ C; D: @- u9 [void buer(int a[N][N][N],int h,int t)2 e4 F% l, u2 h0 B# k9 J0 F0 W& R
{
" O6 v# [) ^7 m. P0 ?# ~. r: j8 hint i,j,s=0;4 @( V3 K2 V  P) n2 a' e5 e
int z=t;
" ~5 T  b7 _7 \& e) W9 X5 e3 iif(z<h) //矩阵的值不全为零。1 ?% R% n8 q6 @# D7 E9 s0 h
{
6 k1 l) P$ ]8 P* i6 Z  tfor(i=0;i<h;i++)  j8 ~9 w- r0 ]2 ~- x
for(j=0;j<h;j++)
! h- y3 k1 i9 h. p( Z$ R+ ja[z-1][i][j]=0; //全部赋值为0!
7 q& ^0 `) M# E, T/ X2 v2 R* |for(i=0;i<h;i++)' U& Y5 \5 Z% T' }) x
for(j=0;j<h;j++)' [- M6 i6 n6 O/ x! g: G
a[z-1][i][j]=jisuan(a,h,z,i,j);" ]4 i4 n. T& b/ j" G+ w
printf("\n矩阵A的%d次布尔幂次方为:\n",z);
% |  d& ^: g8 E' p9 I4 b# \for(i=0;i<h;i++)" t) ~. \$ }) ~" Y7 j3 z- O) \
{
3 g# `# H+ p+ O, g! [& [" @0 ifor(j=0;j<h;j++)5 V8 s+ W1 ?/ i* a4 S% W' u
{ ! X' X& y5 u! Y& I/ M
if(a[z-1][i][j]>1)
2 L2 K( m; L& D# U8 J9 T/ \! @. H4 Za[z-1][i][j]=1;
; e! ?# i2 X) S0 ~9 Dprintf(" %d ",a[z-1][i][j]);# @) G0 {. a: a6 r( i# v
}
0 U; f( M) S8 ~& u5 G, J: j4 e& Jprintf("\n");
5 P) Y0 R: ~8 z8 i$ s}; n" t- @7 ~  T" a/ x+ }
buer(a,h,++z); # V) _. X: F6 x, r1 n+ w( l
}5 h' X# c8 z# }
}
$ F3 c! _1 ?7 p( lvoid warshall(int a[N][N][N],int h); l- i: U1 E& S3 z2 Z/ F+ z, M8 z
{
3 l7 l9 b$ C7 L* b5 a2 ~& aint i,j,p,q,r=0,s;0 d$ s( n) k% i% o+ W7 z6 `. b6 B( U
for(j=0;j<h;j++)3 g1 v. c. o5 u' ]) k3 b
for(i=0;i<h;i++)0 h3 `' I4 d  Z9 c) b& z$ o
if(i!=j && a[0][i][j]==1)
6 S; f' L' i6 W1 P{& u5 o* C% r- J, f
for(s=0;s<h;s++)
% U/ C) B/ Q3 ^{ 6 Q8 ?- j7 h# i7 d9 b' y
a[0][i][s]=a[0][i][s]+a[0][j][s];
4 @# G* E3 U7 Z% e1 e( q0 O. Iif(a[0][i][s]==2)/ U2 t: j; Y. k* p, M- q; y: K: A
a[0][i][s]=1;' @! m% l# t( f7 C  m) a8 F: h
}
  e/ I" F3 ~" [  G) W$ mprintf("\n第%d次运算的结果如下:\n",++r);% S: g7 r  z# w1 B
for(p=0;p<h;p++)  E& k  B' ^4 U$ n
{/ ~3 u) W8 G/ s
for(q=0;q<h;q++)  H3 Q4 K) Q: i# k
printf(" %d ",a[0][p][q]);
1 B, {, e5 [1 G6 {+ a4 wprintf("\n");
5 S4 u' h  ]5 X0 Q8 M' w}" D3 X3 L+ x6 {0 k2 C
}( Q% ]) _2 J; @6 P
}
作者: lizhaowei1990    时间: 2012-4-11 20:25
先点一点这个是要干什么?




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